public void Path() { StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); string text = "Hello world."; byte[] data = Encoding.UTF8.GetBytes(text); using (JsonTextWriter writer = new JsonTextWriter(sw)) { writer.Formatting = Formatting.Indented; writer.WriteStartArray(); Assert.AreEqual("", writer.Path); writer.WriteStartObject(); Assert.AreEqual("[0]", writer.Path); writer.WritePropertyName("Property1"); Assert.AreEqual("[0].Property1", writer.Path); writer.WriteStartArray(); Assert.AreEqual("[0].Property1", writer.Path); writer.WriteValue(1); Assert.AreEqual("[0].Property1[0]", writer.Path); writer.WriteStartArray(); Assert.AreEqual("[0].Property1[1]", writer.Path); writer.WriteStartArray(); Assert.AreEqual("[0].Property1[1][0]", writer.Path); writer.WriteStartArray(); Assert.AreEqual("[0].Property1[1][0][0]", writer.Path); writer.WriteEndObject(); Assert.AreEqual("[0]", writer.Path); writer.WriteStartObject(); Assert.AreEqual("[1]", writer.Path); writer.WritePropertyName("Property2"); Assert.AreEqual("[1].Property2", writer.Path); writer.WriteStartConstructor("Constructor1"); Assert.AreEqual("[1].Property2", writer.Path); writer.WriteNull(); Assert.AreEqual("[1].Property2[0]", writer.Path); writer.WriteStartArray(); Assert.AreEqual("[1].Property2[1]", writer.Path); writer.WriteValue(1); Assert.AreEqual("[1].Property2[1][0]", writer.Path); writer.WriteEnd(); Assert.AreEqual("[1].Property2[1]", writer.Path); writer.WriteEndObject(); Assert.AreEqual("[1]", writer.Path); writer.WriteEndArray(); Assert.AreEqual("", writer.Path); } Assert.AreEqual(@"[ { ""Property1"": [ 1, [ [ [] ] ] ] }, { ""Property2"": new Constructor1( null, [ 1 ] ) } ]", sb.ToString()); }
public string XmlToJson(string Xml) { StringWriter JW = new StringWriter(); JsonTextWriter JTW = new JsonTextWriter(JW); JTW.Formatting = Newtonsoft.Json.Formatting.Indented; StringReader XSR = new StringReader(Xml.Trim()); XmlReader XR = XmlReader.Create(XSR); string ValType = ""; bool InArray = false; XR.Read(); if (!(XR.NodeType == XmlNodeType.Element && XR.Name == "xml")) { throw new Exception("Invalid XML Input"); } bool Read = true; bool NextRead = false; try { if (XR.GetAttribute("in_array") == "1") InArray = true; } catch{} while (Read) { if (! NextRead) { Read = XR.Read(); } NextRead = false; switch(XR.NodeType) { case (XmlNodeType.Element): switch(XR.Name) { case("obj"): JTW.WriteStartObject(); break; case ("arr"): JTW.WriteStartArray(); break; case("cons" ): JTW.WriteStartConstructor(""); break; case ("num"): case ("str"): case ("bool"): case ("undef" ): ValType = XR.Name; Read = XR.Read(); NextRead = true; if (XR.NodeType == XmlNodeType.EndElement) { JTW.WriteValue(""); } break; case("prop"): JTW.WritePropertyName(XR.GetAttribute("oname")); break; } break; case (XmlNodeType.EndElement ): switch(XR.Name) { case("obj"): JTW.WriteEndObject(); break; case("arr"): JTW.WriteEndArray(); break; case("cons" ): JTW.WriteEndConstructor(); break; } break; case(XmlNodeType.Text): switch(ValType) { case("num"): try { JTW.WriteValue(Int32.Parse(XR.Value.Trim())); } catch { try { JTW.WriteValue(float.Parse(XR.Value.Trim())); } catch { JTW.WriteValue(XR.Value); } } break; case("str"): JTW.WriteValue(XR.Value.ToString()); break; case("bool"): if (XR.Value.ToString().Equals("1")) { JTW.WriteValue(true); } else if(XR.Value.ToString().Equals("0")) { JTW.WriteValue(false); } else { JTW.WriteValue(XR.Value); } break; case("undef"): if (XR.Value.ToString() == "null") { JTW.WriteNull(); } else { JTW.WriteValue(XR.Value.ToString()); } break; } break; } } JTW.Close(); if (InArray) { return string.Format("[{0}]",JW.ToString().Trim()); } else { return JW.ToString().Trim(); } }
public void WriteObjectNestedInConstructor() { StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); using (JsonWriter jsonWriter = new JsonTextWriter(sw)) { jsonWriter.WriteStartObject(); jsonWriter.WritePropertyName("con"); jsonWriter.WriteStartConstructor("Ext.data.JsonStore"); jsonWriter.WriteStartObject(); jsonWriter.WritePropertyName("aa"); jsonWriter.WriteValue("aa"); jsonWriter.WriteEndObject(); jsonWriter.WriteEndConstructor(); jsonWriter.WriteEndObject(); } Assert.AreEqual(@"{""con"":new Ext.data.JsonStore({""aa"":""aa""})}", sb.ToString()); }
public static string SyncJsonObjectTypes(string OldJson, string NewJson) { StringReader NSR = new StringReader(NewJson); JsonTextReader New = new JsonTextReader(NSR); StringReader OSR = new StringReader(OldJson); JsonTextReader Old = new JsonTextReader(OSR); StringWriter SW = new StringWriter(); JsonTextWriter Writer = new JsonTextWriter(SW); while (New.Read() && Old.Read()) { if ((Old.TokenType == JsonToken.Integer) && (New.TokenType != JsonToken.Integer)) { int NewIntValue = 0; if (Int32.TryParse(New.Value.ToString(), out NewIntValue)) { Writer.WriteValue(NewIntValue); } else { Writer.WriteValue(New.Value); } } else if ((Old.TokenType == JsonToken.Float) && (New.TokenType != JsonToken.Float)) { float NewFloatValue = 0; if (float.TryParse(New.Value.ToString(), out NewFloatValue)) { Writer.WriteValue(NewFloatValue); } else { Writer.WriteValue(New.Value); } } else if ((Old.TokenType == JsonToken.Boolean) && (New.TokenType != JsonToken.Boolean)) { string Value = New.Value.ToString(); if (Value.Equals("true")) { Writer.WriteValue(true); } else if (Value.Equals("false")) { Writer.WriteValue(false); } else { Writer.WriteValue(New.Value); } } else if ((Old.TokenType == JsonToken.String) && (New.TokenType == JsonToken.Null)) { Writer.WriteValue(""); } else if ((Old.TokenType == JsonToken.StartArray) && (New.TokenType == JsonToken.String)) { Old.Read(); if (Old.TokenType == JsonToken.EndArray) { Writer.WriteValue(JsonToken.StartArray); if (New.Value.ToString() != "") Writer.WriteValue(New.Value); Writer.WriteValue(JsonToken.EndArray); } else { Writer.WriteValue(New.Value); } } else { if (Old.TokenType != New.TokenType) { Writer.Close(); New.Close(); Old.Close(); return NewJson; } else if (New.TokenType == JsonToken.PropertyName) { if (Old.Value == null || New.Value == null) { Writer.Close(); New.Close(); Old.Close(); return NewJson; } else if (!Old.Value.ToString().Equals(New.Value.ToString())) { Writer.Close(); New.Close(); Old.Close(); return NewJson; } } switch (New.TokenType) { case JsonToken.StartConstructor: Writer.WriteStartConstructor(""); break; case JsonToken.EndConstructor: Writer.WriteEndConstructor(); break; case JsonToken.StartObject: Writer.WriteStartObject(); break; case JsonToken.EndObject: Writer.WriteEndObject(); break; case JsonToken.StartArray: Writer.WriteStartArray(); break; case JsonToken.EndArray: Writer.WriteEndArray(); break; case JsonToken.PropertyName: Writer.WritePropertyName(New.Value.ToString()); break; case JsonToken.String: case JsonToken.Integer: case JsonToken.Boolean: case JsonToken.Date: case JsonToken.Null: case JsonToken.Float: Writer.WriteValue(New.Value); break; } } } return SW.ToString(); }