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); }
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()); }