Example #1
0
        private void ReadArrayElements(JsonReader reader, IXmlDocument document, string propertyName, IXmlNode currentNode, XmlNamespaceManager manager)
        {
            string      prefix  = MiscellaneousUtils.GetPrefix(propertyName);
            IXmlElement element = this.CreateElement(propertyName, document, prefix, manager);

            currentNode.AppendChild((IXmlNode)element);
            int num = 0;

            while (reader.Read() && reader.TokenType != JsonToken.EndArray)
            {
                this.DeserializeValue(reader, document, manager, propertyName, (IXmlNode)element);
                ++num;
            }
            if (this.WriteArrayAttribute)
            {
                this.AddJsonArrayAttribute(element, document);
            }
            if (num != 1 || !this.WriteArrayAttribute)
            {
                return;
            }
            this.AddJsonArrayAttribute(Enumerable.Single <IXmlElement>(CollectionUtils.CastValid <IXmlElement>((IEnumerable)element.ChildNodes), (Func <IXmlElement, bool>)(n => n.LocalName == propertyName)), document);
        }
Example #2
0
        private void DeserializeNode(JsonReader reader, IXmlDocument document, XmlNamespaceManager manager, IXmlNode currentNode)
        {
            do
            {
                switch (reader.TokenType)
                {
                case JsonToken.StartConstructor:
                    string propertyName1 = reader.Value.ToString();
                    while (reader.Read() && reader.TokenType != JsonToken.EndConstructor)
                    {
                        this.DeserializeValue(reader, document, manager, propertyName1, currentNode);
                    }
                    break;

                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. Consider specifing a DeserializeRootElementName.");
                    }
                    string propertyName = reader.Value.ToString();
                    reader.Read();
                    if (reader.TokenType == JsonToken.StartArray)
                    {
                        int num = 0;
                        while (reader.Read() && reader.TokenType != JsonToken.EndArray)
                        {
                            this.DeserializeValue(reader, document, manager, propertyName, currentNode);
                            ++num;
                        }
                        if (num == 1 && this.WriteArrayAttribute)
                        {
                            this.AddJsonArrayAttribute(Enumerable.Single <IXmlElement>(CollectionUtils.CastValid <IXmlElement>((IEnumerable)currentNode.ChildNodes), (Func <IXmlElement, bool>)(n => n.LocalName == propertyName)), document);
                            break;
                        }
                        else
                        {
                            break;
                        }
                    }
                    else
                    {
                        this.DeserializeValue(reader, document, manager, propertyName, currentNode);
                        break;
                    }

                case JsonToken.Comment:
                    currentNode.AppendChild(document.CreateComment((string)reader.Value));
                    break;

                case JsonToken.EndObject:
                    return;

                case JsonToken.EndArray:
                    return;

                default:
                    throw new JsonSerializationException("Unexpected JsonToken when deserializing node: " + (object)reader.TokenType);
                }
            }while (reader.TokenType == JsonToken.PropertyName || reader.Read());
        }