コード例 #1
0
        public object Read(Newtonsoft.Json.JsonReader reader)
        {
            if (reader.TokenType != Newtonsoft.Json.JsonToken.StartObject)
                throw new Exception();

            int w = ReadIntProperty(reader, "Width");
            int h = ReadIntProperty(reader, "Height");
            int d = ReadIntProperty(reader, "Depth");

            var grid = new TileData[d, h, w];

            reader.Read();
            if (reader.TokenType != Newtonsoft.Json.JsonToken.PropertyName || (string)reader.Value != "TileData")
                throw new Exception();

            ReadAndValidate(reader, Newtonsoft.Json.JsonToken.StartArray);

            var queue = new BlockingCollection<Tuple<int, byte[]>>();

            var readerTask = Task.Factory.StartNew(() =>
            {
                for (int i = 0; i < d; ++i)
                {
                    reader.Read();
                    int z = (int)(long)reader.Value;

                    byte[] buf = reader.ReadAsBytes();

                    queue.Add(new Tuple<int, byte[]>(z, buf));
                }

                queue.CompleteAdding();
            });

            Parallel.For(0, d, i =>
            {
                var tuple = queue.Take();

                int z = tuple.Item1;
                byte[] arr = tuple.Item2;

                using (var memStream = new MemoryStream(arr))
                {
                    using (var decompressStream = new DeflateStream(memStream, CompressionMode.Decompress))
                    using (var streamReader = new BinaryReader(decompressStream))
                    {
                        for (int y = 0; y < h; ++y)
                            for (int x = 0; x < w; ++x)
                                grid[z, y, x].Raw = streamReader.ReadUInt64();
                    }
                }
            });

            readerTask.Wait();

            ReadAndValidate(reader, Newtonsoft.Json.JsonToken.EndArray);
            ReadAndValidate(reader, Newtonsoft.Json.JsonToken.EndObject);

            return grid;
        }
コード例 #2
0
        public override object ReadJson(Newtonsoft.Json.JsonReader reader, System.Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer)
        {
            Type t = (ReflectionUtils.IsNullableType(objectType))
              ? Nullable.GetUnderlyingType(objectType)
              : objectType;

            if (reader.TokenType == JsonToken.Null)
            {
                if (!ReflectionUtils.IsNullableType(objectType))
                    throw new Exception("Cannot convert null value to {0}.");

                return null;
            }

            if (reader.TokenType != JsonToken.StartConstructor || string.Compare(reader.Value.ToString(), "Date", StringComparison.Ordinal) != 0)
                throw new Exception("Unexpected token or value when parsing date. Token: {0}, Value: {1}");

            reader.Read();

            if (reader.TokenType != JsonToken.Integer)
                throw new Exception("Unexpected token parsing date. Expected Integer, got {0}.");

            long ticks = (long)reader.Value;

            var d = new DateTime((ticks * 10000) + _tick, DateTimeKind.Local);

            reader.Read();

            if (reader.TokenType != JsonToken.EndConstructor)
                throw new Exception("Unexpected token parsing date. Expected EndConstructor, got {0}.");

            return d;
        }
コード例 #3
0
        /// <summary>
        /// Reads the JSON representation of the object.
        /// </summary>
        public override object ReadJson( Newtonsoft.Json.JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer )
        {
            if( typeof( DataService.Attribute ) == objectType )
            {
                var result = default( DataService.Attribute );
                if( reader.Read() && reader.TokenType == Newtonsoft.Json.JsonToken.PropertyName )
                {
                    var key = ushort.Parse( reader.Value.ToString(), System.Globalization.CultureInfo.InvariantCulture );
                    var value = reader.ReadAsString();

                    result = new DataService.Attribute( key, value );
                }
                return result;
            }
            else
            {
                var result = new List<DataService.Attribute>();
                if( reader.TokenType == Newtonsoft.Json.JsonToken.StartObject )
                {
                    while( reader.Read() && reader.TokenType == Newtonsoft.Json.JsonToken.PropertyName )
                    {
                        var key = ushort.Parse( reader.Value.ToString(), System.Globalization.CultureInfo.InvariantCulture );
                        var value = reader.ReadAsString();

                        result.Add( new DataService.Attribute( key, value ) );
                    }
                }
                return result.ToArray();
            }
        }
コード例 #4
0
        public override object ReadValue(Type ValueType, Newtonsoft.Json.JsonReader Reader, MudObject Owner)
        {
            var r = new Dictionary<String, Object>();

            Reader.Read();
            while (Reader.TokenType != Newtonsoft.Json.JsonToken.EndObject)
            {
                var name = Reader.Value.ToString();
                Reader.Read();
                var value = PersistAttribute._ReadValue(null, Reader, Owner);
                r.Upsert(name, value);
            }
            Reader.Read();

            return r;
        }
コード例 #5
0
        /// <summary>
        /// Reads the JSON representation of the object.
        /// </summary>
        public override object ReadJson( Newtonsoft.Json.JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer )
        {
            var catalogueEntry = new CatalogEntry();

            while( reader.Read() && reader.TokenType == Newtonsoft.Json.JsonToken.PropertyName )
            {
                switch( reader.Value.ToString() )
                {
                    case "key":
                        catalogueEntry.Key = short.Parse( reader.ReadAsString(), CultureInfo.InvariantCulture );
                        break;
                    case "attributes":
                        reader.Read();
                        catalogueEntry.Attributes = serializer.Deserialize<DataService.Attribute[]>( reader );
                        break;
                }
            }
            return catalogueEntry;
        }
コード例 #6
0
        /// <summary>
        /// Reads the JSON representation of the object.
        /// </summary>
        public override object ReadJson( Newtonsoft.Json.JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer )
        {
            var configuration = new Configuration();

            while( reader.Read() && reader.TokenType == Newtonsoft.Json.JsonToken.PropertyName )
            {
                switch( reader.Value.ToString() )
                {
                    case "partAttributes":
                        reader.Read();
                        configuration.PartAttributes = serializer.Deserialize<AbstractAttributeDefinition[]>( reader );
                        break;
                    case "characteristicAttributes":
                        reader.Read();
                        configuration.CharacteristicAttributes = serializer.Deserialize<AbstractAttributeDefinition[]>( reader );
                        break;
                    case "measurementAttributes":
                        reader.Read();
                        configuration.MeasurementAttributes = serializer.Deserialize<AbstractAttributeDefinition[]>( reader );
                        break;
                    case "valueAttributes":
                        reader.Read();
                        configuration.ValueAttributes = serializer.Deserialize<AbstractAttributeDefinition[]>( reader );
                        break;
                    case "catalogAttributes":
                        reader.Read();
                        configuration.CatalogAttributes = serializer.Deserialize<AttributeDefinition[]>( reader );
                        break;
                }
            }
            return configuration;
        }
コード例 #7
0
        public override object ReadValue(Type ValueType, Newtonsoft.Json.JsonReader Reader, MudObject Owner)
        {
            var r = new Dictionary<RelativeLocations, List<MudObject>>();

            Reader.Read();
            while (Reader.TokenType != Newtonsoft.Json.JsonToken.EndObject)
            {
                var relloc = StringToRelativeLocation(Reader.Value.ToString());
                var l = new List<MudObject>();
                Reader.Read();
                Reader.Read();
                while (Reader.TokenType != Newtonsoft.Json.JsonToken.EndArray)
                {
                    var mudObject = MudObject.GetObject(Reader.Value.ToString());
                    if (mudObject != null) l.Add(mudObject);
                    mudObject.Location = Owner;
                    Reader.Read();
                }
                Reader.Read();
                r.Upsert(relloc, l);
            }
            Reader.Read();

            return r;
        }
コード例 #8
0
        public override object ReadJson(Newtonsoft.Json.JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            if (objectType != typeof(XmlDocument))
                throw new JsonSerializationException("XmlNodeConverter only supports deserializing XmlDocuments");

            XmlDocument document = new XmlDocument();
            XmlNamespaceManager manager = new XmlNamespaceManager(document.NameTable);

            if (reader.TokenType != JsonToken.StartObject)
                throw new JsonSerializationException("XmlNodeConverter can only convert JSON that begins with an object.");

            reader.Read();

            DeserializeNode(reader, document, manager, document);

            return document;
        }
コード例 #9
0
        /// <summary>
        /// Reads the JSON representation of the object.
        /// </summary>
        public override object ReadJson( Newtonsoft.Json.JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer )
        {
            var key = default( ushort );
            var length = default( ushort );
            var queryEfficient = default( bool );
            var description = default( string );
            var attributeDefinitionType = default( string );
            var type = default( AttributeType );
            var catalogUuid = default( Guid );

            while( reader.Read() && reader.TokenType == Newtonsoft.Json.JsonToken.PropertyName )
            {
                switch( reader.Value.ToString() )
                {
                    case "key":
                        key = ushort.Parse( reader.ReadAsString(), CultureInfo.InvariantCulture );
                        break;
                    case "queryEfficient":
                        queryEfficient = bool.Parse( reader.ReadAsString() );
                        break;
                    case "description":
                        description = reader.ReadAsString();
                        break;
                    case "length":
                        length = ushort.Parse( reader.ReadAsString(), CultureInfo.InvariantCulture );
                        break;
                    case "type":
                        type = (AttributeType)Enum.Parse( typeof( AttributeType ), reader.ReadAsString() );
                        break;
                    case "catalog":
                        catalogUuid = Guid.Parse( reader.ReadAsString() );
                        break;
                    case "definitionType":
                        attributeDefinitionType = reader.ReadAsString();
                        break;
                }
            }

            if( attributeDefinitionType == "AttributeDefinition" )
                return new AttributeDefinition { Description = description, Key = key, Length = length, QueryEfficient = queryEfficient, Type = type };

            if( attributeDefinitionType == "CatalogAttributeDefinition" )
                return new CatalogAttributeDefinition { Description = description, Key = key, QueryEfficient = queryEfficient, Catalog = catalogUuid };

            return null;
        }
コード例 #10
0
        /// <summary>
        /// Reads the JSON representation of the object.
        /// </summary>
        public override object ReadJson( Newtonsoft.Json.JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer )
        {
            var catalog = new Catalog();
            if( reader.TokenType == Newtonsoft.Json.JsonToken.StartObject )
            {
                while( reader.Read() && reader.TokenType != Newtonsoft.Json.JsonToken.EndObject )
                {
                    switch( reader.Value.ToString() )
                    {
                        case "name": catalog.Name = reader.ReadAsString(); break;
                        case "uuid": catalog.Uuid = new Guid( reader.ReadAsString() ); break;
                        case "validAttributes":
                            if( reader.Read() && reader.TokenType == Newtonsoft.Json.JsonToken.StartArray )
                            {
                                var atts = new List<ushort>();
                                while( reader.Read() && reader.TokenType != Newtonsoft.Json.JsonToken.EndArray )
                                {
                                    atts.Add( Convert.ToUInt16( reader.Value ) );
                                }
                                catalog.ValidAttributes = atts.ToArray();
                            }
                            break;
                        case "catalogEntries":
                            if( reader.Read() && reader.TokenType == Newtonsoft.Json.JsonToken.StartArray )
                            {
                                if( reader.Read() && reader.TokenType == Newtonsoft.Json.JsonToken.StartObject )
                                {
                                    var entries = new List< CatalogEntry >();
                                    while( reader.TokenType != Newtonsoft.Json.JsonToken.EndArray )
                                    {
                                        entries.Add(serializer.Deserialize<CatalogEntry>( reader ));
                                        reader.Read();
                                    }
                                    catalog.CatalogEntries = entries.ToArray();
                                }
                            }
                            break;

                    }
                }
            }
            return catalog;
        }
コード例 #11
0
        public override object ReadJson(Newtonsoft.Json.JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer)
        {
            List<Bot> bots = new List<Bot>();
            int d = reader.Depth;

            while (reader.Read() && reader.Depth > d)
            {
                Bot current = new Bot();
                int depth = reader.Depth;

                current.name = reader.Value.ToString();

                reader.Read();
                while (reader.Read() && reader.Depth > depth)
                {
                    if (reader.Value == null) break;
                    switch (reader.Value.ToString())
                    {
                        case "image_48":
                            reader.Read();
                            current.image_48 = reader.Value.ToString();
                            break;

                        case "image_64":
                            reader.Read();
                            current.image_48 = reader.Value.ToString();
                            break;

                        case "emoji":
                            reader.Read();
                            current.emoji = reader.Value.ToString();
                            break;
                    }
                }

                bots.Add(current);
            }

            return bots.ToArray();
        }
コード例 #12
0
        private void DeserializeValue(Newtonsoft.Json.JsonReader reader, XmlDocument document, XmlNamespaceManager manager, string propertyName, XmlNode currentNode)
        {
            // deserialize xml element
            bool finishedAttributes = false;
            bool finishedElement = false;
            Dictionary<string, string> attributeNameValues = new Dictionary<string, string>();

            // a string token means the element only has a single text child
            if (reader.TokenType != JsonToken.String
              && reader.TokenType != JsonToken.Null
              && reader.TokenType != JsonToken.Boolean
              && reader.TokenType != JsonToken.Integer
              && reader.TokenType != JsonToken.Float
              && reader.TokenType != JsonToken.Date
              && reader.TokenType != JsonToken.StartConstructor)
            {
                // read properties until first non-attribute is encountered
                while (!finishedAttributes && !finishedElement && reader.Read())
                {
                    switch (reader.TokenType)
                    {
                        case JsonToken.PropertyName:
                            string attributeName = reader.Value.ToString();

                            if (attributeName[0] == '@')
                            {
                                attributeName = attributeName.Substring(1);
                                reader.Read();
                                string attributeValue = reader.Value.ToString();
                                attributeNameValues.Add(attributeName, attributeValue);
                            }
                            else
                            {
                                finishedAttributes = true;
                            }
                            break;
                        case JsonToken.EndObject:
                            finishedElement = true;
                            break;
                        default:
                            throw new JsonSerializationException("Unexpected JsonToken: " + reader.TokenType);
                    }
                }
            }

            // have to wait until attributes have been parsed before creating element
            // attributes may contain namespace info used by the element
            XmlElement element = document.CreateElement(propertyName);

            currentNode.AppendChild(element);

            // add attributes to newly created element
            foreach (KeyValuePair<string, string> nameValue in attributeNameValues)
            {
                XmlAttribute attribute = document.CreateAttribute(nameValue.Key);

                attribute.Value = nameValue.Value;

                element.SetAttributeNode(attribute);
            }

            if (reader.TokenType == JsonToken.String)
            {
                element.AppendChild(document.CreateTextNode(reader.Value.ToString()));
            }
            else if (reader.TokenType == JsonToken.Integer)
            {
                element.AppendChild(document.CreateTextNode(XmlConvert.ToString((long)reader.Value)));
            }
            else if (reader.TokenType == JsonToken.Float)
            {
                element.AppendChild(document.CreateTextNode(XmlConvert.ToString((double)reader.Value)));
            }
            else if (reader.TokenType == JsonToken.Boolean)
            {
                element.AppendChild(document.CreateTextNode(XmlConvert.ToString((bool)reader.Value)));
            }
            else if (reader.TokenType == JsonToken.Date)
            {
                DateTime d = (DateTime)reader.Value;
                element.AppendChild(document.CreateTextNode(XmlConvert.ToString(d, ToSerializationMode(d.Kind))));
            }
            else if (reader.TokenType == JsonToken.Null)
            {
                // empty element. do nothing
            }
            else
            {
                // finished element will have no children to deserialize
                if (!finishedElement)
                {
                    manager.PushScope();

                    DeserializeNode(reader, document, manager, element);

                    manager.PopScope();
                }
            }
        }
コード例 #13
0
        private void DeserializeNode(Newtonsoft.Json.JsonReader reader, XmlDocument document, XmlNamespaceManager manager, XmlNode currentNode)
        {
            if (currentNode.NodeType == XmlNodeType.Document)
            {
                XmlElement root = document.CreateElement("records");
                document.AppendChild(root);
                currentNode = root;
            }

            XmlNode savedNode = currentNode;
            do
            {
                if (savedNode.Name == "records" && savedNode.ParentNode.NodeType == XmlNodeType.Document)
                {
                    currentNode = savedNode;
                }
                
                switch (reader.TokenType)
                {
                    case JsonToken.PropertyName:
                        if (currentNode.NodeType == XmlNodeType.Document && document.DocumentElement != null)
                            throw new JsonSerializationException("JSON root object has multiple properties. The root object must have a single property in order to create a valid XML document.");

                        string propertyName = reader.Value.ToString();
                        reader.Read();

                        if (reader.TokenType == JsonToken.StartArray)
                        {
                            while (reader.Read() && reader.TokenType != JsonToken.EndArray)
                            {
                                if (reader.TokenType == JsonToken.StartObject)
                                {
                                    if (currentNode.Name == "records" && currentNode.ParentNode.NodeType == XmlNodeType.Document &&
                                       (propertyName == "Updated" || propertyName == "Created" || propertyName == "Deleted"))
                                    {
                                        XmlNode tempNode = currentNode.SelectSingleNode(propertyName);
                                        if (tempNode != null)
                                        {
                                            currentNode = tempNode;
                                            propertyName = "record";
                                        }
                                    }
                                }
                                DeserializeValue(reader, document, manager, propertyName, currentNode);
                            }
                        }
                        else
                        {
                            bool addRecord = currentNode.ParentNode != null && currentNode.ParentNode.ParentNode != null &&
                                                    currentNode.ParentNode.Name == "records" && currentNode.ParentNode.ParentNode.NodeType == XmlNodeType.Document;

                            if ((currentNode.Name == "Updated" || currentNode.Name == "Created" || currentNode.Name == "Deleted") && addRecord)
                            {
                                XmlElement record = document.CreateElement("record");
                                currentNode.AppendChild(record);
                                currentNode = record;
                            }
                            DeserializeValue(reader, document, manager, propertyName, currentNode);
                        }
                        break;
                    case JsonToken.StartConstructor:
                        string constructorName = reader.Value.ToString();

                        while (reader.Read() && reader.TokenType != JsonToken.EndConstructor)
                        {
                            DeserializeValue(reader, document, manager, "-" + constructorName, currentNode);
                        }
                        break;
                    case JsonToken.EndObject:
                    case JsonToken.EndArray:
                        return;
                    default:
                        throw new JsonSerializationException("Unexpected JsonToken when deserializing node: " + reader.TokenType);
                }
            } while (reader.TokenType == JsonToken.PropertyName || reader.Read());
            // don't read if current token is a property. token was already read when parsing element attributes
        }
コード例 #14
0
ファイル: XmlNodeConverter.cs プロジェクト: HaKDMoDz/eStd
        private void ReadArrayElements(Newtonsoft.Json.JsonReader reader, IXmlDocument document, string propertyName, IXmlNode currentNode, XmlNamespaceManager manager)
        {
            string elementPrefix = MiscellaneousUtils.GetPrefix(propertyName);
            
            IXmlElement nestedArrayElement = CreateElement(propertyName, document, elementPrefix, manager);
            
            currentNode.AppendChild(nestedArrayElement);

            int count = 0;
            while (reader.Read() && reader.TokenType != Newtonsoft.Json.JsonToken.EndArray)
            {
                DeserializeValue(reader, document, manager, propertyName, nestedArrayElement);
                count++;
            }
            
            if (WriteArrayAttribute)
            {
                AddJsonArrayAttribute(nestedArrayElement, document);
            }

            if (count == 1 && WriteArrayAttribute)
            {
                IXmlElement arrayElement = nestedArrayElement.ChildNodes.OfType<IXmlElement>().Single(n => n.LocalName == propertyName);
                AddJsonArrayAttribute(arrayElement, document);
            }
        }
コード例 #15
0
ファイル: XmlNodeConverter.cs プロジェクト: HaKDMoDz/eStd
 private Dictionary<string, string> ReadAttributeElements(Newtonsoft.Json.JsonReader reader, XmlNamespaceManager manager)
 {
     Dictionary<string, string> attributeNameValues = new Dictionary<string, string>();
     bool finishedAttributes = false;
     bool finishedElement = false;
     
     // a string token means the element only has a single text child
     if (reader.TokenType != Newtonsoft.Json.JsonToken.String &&
         reader.TokenType != Newtonsoft.Json.JsonToken.Null &&
         reader.TokenType != Newtonsoft.Json.JsonToken.Boolean &&
         reader.TokenType != Newtonsoft.Json.JsonToken.Integer &&
         reader.TokenType != Newtonsoft.Json.JsonToken.Float &&
         reader.TokenType != Newtonsoft.Json.JsonToken.Date &&
         reader.TokenType != Newtonsoft.Json.JsonToken.StartConstructor)
     {
         // read properties until first non-attribute is encountered
         while (!finishedAttributes && !finishedElement && reader.Read())
         {
             switch (reader.TokenType)
             {
                 case Newtonsoft.Json.JsonToken.PropertyName:
                     string attributeName = reader.Value.ToString();
                     
                     if (!string.IsNullOrEmpty(attributeName))
                     {
                         char firstChar = attributeName[0];
                         string attributeValue;
                         
                         switch (firstChar)
                         {
                             case '@':
                                 attributeName = attributeName.Substring(1);
                                 reader.Read();
                                 attributeValue = ConvertTokenToXmlValue(reader);
                                 attributeNameValues.Add(attributeName, attributeValue);
                                 
                                 string namespacePrefix;
                                 if (IsNamespaceAttribute(attributeName, out namespacePrefix))
                                 {
                                     manager.AddNamespace(namespacePrefix, attributeValue);
                                 }
                                 break;
                             case '$':
                                 attributeName = attributeName.Substring(1);
                                 reader.Read();
                                 attributeValue = reader.Value.ToString();
                                 
                                 // check that JsonNamespaceUri is in scope
                                 // if it isn't then add it to document and namespace manager
                                 string jsonPrefix = manager.LookupPrefix(JsonNamespaceUri);
                                 if (jsonPrefix == null)
                                 {
                                     // ensure that the prefix used is free
                                     int? i = null;
                                     while (manager.LookupNamespace("json" + i) != null)
                                     {
                                         i = i.GetValueOrDefault() + 1;
                                     }
                                     jsonPrefix = "json" + i;
                                     
                                     attributeNameValues.Add("xmlns:" + jsonPrefix, JsonNamespaceUri);
                                     manager.AddNamespace(jsonPrefix, JsonNamespaceUri);
                                 }
                                 
                                 attributeNameValues.Add(jsonPrefix + ":" + attributeName, attributeValue);
                                 break;
                             default:
                                 finishedAttributes = true;
                                 break;
                         }
                     }
                     else
                     {
                         finishedAttributes = true;
                     }
                     
                     break;
                 case Newtonsoft.Json.JsonToken.EndObject:
                     finishedElement = true;
                     break;
                 case Newtonsoft.Json.JsonToken.Comment:
                     finishedElement = true;
                     break;
                 default:
                     throw new Newtonsoft.Json.JsonSerializationException("Unexpected JsonToken: " + reader.TokenType);
             }
         }
     }
     
     return attributeNameValues;
 }
コード例 #16
0
        static int ReadIntProperty(Newtonsoft.Json.JsonReader reader, string propertyName)
        {
            reader.Read();
            if (reader.TokenType != Newtonsoft.Json.JsonToken.PropertyName || (string)reader.Value != propertyName)
                throw new Exception();

            reader.Read();
            if (reader.TokenType != Newtonsoft.Json.JsonToken.Integer)
                throw new Exception();

            return (int)(long)reader.Value;
        }
コード例 #17
0
 static void ReadAndValidate(Newtonsoft.Json.JsonReader reader, Newtonsoft.Json.JsonToken token)
 {
     reader.Read();
     if (reader.TokenType != token)
         throw new Exception();
 }
コード例 #18
0
ファイル: JsonConverter.cs プロジェクト: vc3/ExoWeb
 public override object ReadJson(Newtonsoft.Json.JsonReader reader, Type objectType, object value, Newtonsoft.Json.JsonSerializer serializer)
 {
     if (reader.TokenType == Newtonsoft.Json.JsonToken.StartObject && reader.Read())
     {
         value = deserialize((JsonReader)reader);
         if (reader.TokenType != Newtonsoft.Json.JsonToken.EndObject)
             throw new FormatException("End object '}' expected");
     }
     return value;
 }
コード例 #19
0
ファイル: XmlNodeConverter.cs プロジェクト: HaKDMoDz/eStd
 private void CreateInstruction(Newtonsoft.Json.JsonReader reader, IXmlDocument document, IXmlNode currentNode, string propertyName)
 {
     if (propertyName == DeclarationName)
     {
         string version = null;
         string encoding = null;
         string standalone = null;
         while (reader.Read() && reader.TokenType != Newtonsoft.Json.JsonToken.EndObject)
         {
             switch (reader.Value.ToString())
             {
                 case "@version":
                     reader.Read();
                     version = reader.Value.ToString();
                     break;
                 case "@encoding":
                     reader.Read();
                     encoding = reader.Value.ToString();
                     break;
                 case "@standalone":
                     reader.Read();
                     standalone = reader.Value.ToString();
                     break;
                 default:
                     throw new Newtonsoft.Json.JsonSerializationException("Unexpected property name encountered while deserializing XmlDeclaration: " + reader.Value);
             }
         }
         
         IXmlNode declaration = document.CreateXmlDeclaration(version, encoding, standalone);
         currentNode.AppendChild(declaration);
     }
     else
     {
         IXmlNode instruction = document.CreateProcessingInstruction(propertyName.Substring(1), reader.Value.ToString());
         currentNode.AppendChild(instruction);
     }
 }
コード例 #20
0
ファイル: XmlNodeConverter.cs プロジェクト: HaKDMoDz/eStd
        /// <summary>
        /// Reads the JSON representation of the object.
        /// </summary>
        /// <param name="reader">The <see cref="JsonReader"/> to read from.</param>
        /// <param name="objectType">Type of the object.</param>
        /// <param name="existingValue">The existing value of object being read.</param>
        /// <param name="serializer">The calling serializer.</param>
        /// <returns>The object value.</returns>
        public override object ReadJson(Newtonsoft.Json.JsonReader reader, Type objectType, object existingValue, System.Serialisation.Json.JsonSerializer serializer)
        {
            if (reader.TokenType == Newtonsoft.Json.JsonToken.Null)
                return null;
            
            XmlNamespaceManager manager = new XmlNamespaceManager(new NameTable());
            IXmlDocument document = null;
            IXmlNode rootNode = null;
            
            #if !NET20
            if (typeof(XObject).IsAssignableFrom(objectType))
            {
                if (objectType != typeof(XDocument) && objectType != typeof(XElement))
                    throw new Newtonsoft.Json.JsonSerializationException("XmlNodeConverter only supports deserializing XDocument or XElement.");
                
                XDocument d = new XDocument();
                document = new XDocumentWrapper(d);
                rootNode = document;
            }
            #endif
            #if !(NETFX_CORE || PORTABLE)
            if (typeof(XmlNode).IsAssignableFrom(objectType))
            {
                if (objectType != typeof(XmlDocument))
                    throw new Newtonsoft.Json.JsonSerializationException("XmlNodeConverter only supports deserializing XmlDocuments");
                
                XmlDocument d = new XmlDocument();
                // prevent http request when resolving any DTD references
                d.XmlResolver = null;
                
                document = new XmlDocumentWrapper(d);
                rootNode = document;
            }
            #endif
            
            if (document == null || rootNode == null)
                throw new Newtonsoft.Json.JsonSerializationException("Unexpected type when converting XML: " + objectType);
            
            if (reader.TokenType != Newtonsoft.Json.JsonToken.StartObject)
                throw new Newtonsoft.Json.JsonSerializationException("XmlNodeConverter can only convert JSON that begins with an object.");
            
            if (!string.IsNullOrEmpty(DeserializeRootElementName))
            {
                //rootNode = document.CreateElement(DeserializeRootElementName);
                //document.AppendChild(rootNode);
                ReadElement(reader, document, rootNode, DeserializeRootElementName, manager);
            }
            else
            {
                reader.Read();
                DeserializeNode(reader, document, manager, rootNode);
            }
            
            #if !NET20
            if (objectType == typeof(XElement))
            {
                XElement element = (XElement)document.DocumentElement.WrappedNode;
                element.Remove();

                return element;
            }
            #endif
            
            return document.WrappedNode;
        }
コード例 #21
0
ファイル: XmlNodeConverter.cs プロジェクト: HaKDMoDz/eStd
 private void CreateDocumentType(Newtonsoft.Json.JsonReader reader, IXmlDocument document, IXmlNode currentNode)
 {
     string name = null;
     string publicId = null;
     string systemId = null;
     string internalSubset = null;
     while (reader.Read() && reader.TokenType != Newtonsoft.Json.JsonToken.EndObject)
     {
         switch (reader.Value.ToString())
         {
             case "@name":
                 reader.Read();
                 name = reader.Value.ToString();
                 break;
             case "@public":
                 reader.Read();
                 publicId = reader.Value.ToString();
                 break;
             case "@system":
                 reader.Read();
                 systemId = reader.Value.ToString();
                 break;
             case "@internalSubset":
                 reader.Read();
                 internalSubset = reader.Value.ToString();
                 break;
             default:
                 throw new Newtonsoft.Json.JsonSerializationException("Unexpected property name encountered while deserializing XmlDeclaration: " + reader.Value);
         }
     }
     
     IXmlNode documentType = document.CreateXmlDocumentType(name, publicId, systemId, internalSubset);
     currentNode.AppendChild(documentType);
 }
コード例 #22
0
ファイル: XmlNodeConverter.cs プロジェクト: HaKDMoDz/eStd
 private void DeserializeNode(Newtonsoft.Json.JsonReader reader, IXmlDocument document, XmlNamespaceManager manager, IXmlNode currentNode)
 {
     do
     {
         switch (reader.TokenType)
         {
             case Newtonsoft.Json.JsonToken.PropertyName:
                 if (currentNode.NodeType == XmlNodeType.Document && document.DocumentElement != null)
                     throw new Newtonsoft.Json.JsonSerializationException("JSON root object has multiple properties. The root object must have a single property in order to create a valid XML document. Consider specifing a DeserializeRootElementName.");
                 
                 string propertyName = reader.Value.ToString();
                 reader.Read();
                 
                 if (reader.TokenType == Newtonsoft.Json.JsonToken.StartArray)
                 {
                     int count = 0;
                     while (reader.Read() && reader.TokenType != Newtonsoft.Json.JsonToken.EndArray)
                     {
                         DeserializeValue(reader, document, manager, propertyName, currentNode);
                         count++;
                     }
                     
                     if (count == 1 && WriteArrayAttribute)
                     {
                         IXmlElement arrayElement = currentNode.ChildNodes.OfType<IXmlElement>().Single(n => n.LocalName == propertyName);
                         AddJsonArrayAttribute(arrayElement, document);
                     }
                 }
                 else
                 {
                     DeserializeValue(reader, document, manager, propertyName, currentNode);
                 }
                 break;
             case Newtonsoft.Json.JsonToken.StartConstructor:
                 string constructorName = reader.Value.ToString();
                 
                 while (reader.Read() && reader.TokenType != Newtonsoft.Json.JsonToken.EndConstructor)
                 {
                     DeserializeValue(reader, document, manager, constructorName, currentNode);
                 }
                 break;
             case Newtonsoft.Json.JsonToken.Comment:
                 currentNode.AppendChild(document.CreateComment((string)reader.Value));
                 break;
             case Newtonsoft.Json.JsonToken.EndObject:
             case Newtonsoft.Json.JsonToken.EndArray:
                 return;
             default:
                 throw new Newtonsoft.Json.JsonSerializationException("Unexpected JsonToken when deserializing node: " + reader.TokenType);
         }
     }
     while (reader.TokenType == Newtonsoft.Json.JsonToken.PropertyName || reader.Read());
     // don't read if current token is a property. token was already read when parsing element attributes
 }