public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { writer.WriteStartArray(); var sortItems = value as IList<KeyValuePair<PropertyPathMarker, ISort>>; foreach (var item in sortItems) { writer.WriteStartObject(); var contract = serializer.ContractResolver as SettingsContractResolver; var fieldName = contract.Infer.PropertyPath(item.Key); writer.WritePropertyName(fieldName); serializer.Serialize(writer, item.Value); writer.WriteEndObject(); } writer.WriteEndArray(); }
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { var dict = value as Dictionary<string, DynamicTemplate>; if (dict == null || !dict.HasAny()) return; writer.WriteStartArray(); foreach (var p in dict) { writer.WriteStartObject(); { writer.WritePropertyName(p.Key); serializer.Serialize(writer, p.Value); } writer.WriteEndObject(); } writer.WriteEndArray(); }
private void SerializeGroupedNodes(JsonWriter writer, IXmlNode node, XmlNamespaceManager manager, bool writePropertyName) { // group nodes together by name Dictionary<string, List<IXmlNode>> nodesGroupedByName = new Dictionary<string, List<IXmlNode>>(); for (int i = 0; i < node.ChildNodes.Count; i++) { IXmlNode childNode = node.ChildNodes[i]; string nodeName = GetPropertyName(childNode, manager); List<IXmlNode> nodes; if (!nodesGroupedByName.TryGetValue(nodeName, out nodes)) { nodes = new List<IXmlNode>(); nodesGroupedByName.Add(nodeName, nodes); } nodes.Add(childNode); } // loop through grouped nodes. write single name instances as normal, // write multiple names together in an array foreach (KeyValuePair<string, List<IXmlNode>> nodeNameGroup in nodesGroupedByName) { List<IXmlNode> groupedNodes = nodeNameGroup.Value; bool writeArray; if (groupedNodes.Count == 1) { writeArray = IsArray(groupedNodes[0]); } else { writeArray = true; } if (!writeArray) { SerializeNode(writer, groupedNodes[0], manager, writePropertyName); } else { string elementNames = nodeNameGroup.Key; if (writePropertyName) writer.WritePropertyName(elementNames); writer.WriteStartArray(); for (int i = 0; i < groupedNodes.Count; i++) { SerializeNode(writer, groupedNodes[i], manager, false); } writer.WriteEndArray(); } } }