public void ValueFormatting() { StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); using (JsonWriter jsonWriter = new JsonTextWriter(sw)) { jsonWriter.WriteStartArray(); jsonWriter.WriteValue('@'); jsonWriter.WriteValue("\r\n\t\f\b?{\\r\\n\"\'"); jsonWriter.WriteValue(true); jsonWriter.WriteValue(10); jsonWriter.WriteValue(10.99); jsonWriter.WriteValue(0.99); jsonWriter.WriteValue(0.000000000000000001d); jsonWriter.WriteValue(0.000000000000000001m); jsonWriter.WriteValue((string)null); jsonWriter.WriteValue((object)null); jsonWriter.WriteValue("This is a string."); jsonWriter.WriteNull(); jsonWriter.WriteUndefined(); jsonWriter.WriteEndArray(); } string expected = @"[""@"",""\r\n\t\f\b?{\\r\\n\""'"",true,10,10.99,0.99,1E-18,0.000000000000000001,null,null,""This is a string."",null,undefined]"; string result = sb.ToString(); Console.WriteLine("ValueFormatting"); Console.WriteLine(result); Assert.AreEqual(expected, result); }
public static void SerializeMessage(JsonTextWriter writer, ServiceType type, object message) { Require.NotNull(writer, "writer"); Require.NotNull(type, "type"); Require.NotNull(message, "message"); writer.WriteStartObject(); foreach (var field in type.Fields.Values) { writer.WritePropertyName(field.Tag.ToString(CultureInfo.InvariantCulture)); object value = field.Getter(message); if (value == null) { writer.WriteNull(); } else if (field.CollectionType != null) { writer.WriteStartArray(); foreach (object item in (IEnumerable)value) { if (field.ServiceType != null) SerializeMessage(writer, field.ServiceType, item); else writer.WriteValue(item); } writer.WriteEndArray(); } else { if (field.ServiceType != null) SerializeMessage(writer, field.ServiceType, value); else writer.WriteValue(value); } } writer.WriteEndObject(); }
public void WriteReadWrite() { StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); using (JsonWriter jsonWriter = new JsonTextWriter(sw) { Formatting = Formatting.Indented }) { jsonWriter.WriteStartArray(); jsonWriter.WriteValue(true); jsonWriter.WriteStartObject(); jsonWriter.WritePropertyName("integer"); jsonWriter.WriteValue(99); jsonWriter.WritePropertyName("string"); jsonWriter.WriteValue("how now brown cow?"); jsonWriter.WritePropertyName("array"); jsonWriter.WriteStartArray(); for (int i = 0; i < 5; i++) { jsonWriter.WriteValue(i); } jsonWriter.WriteStartObject(); jsonWriter.WritePropertyName("decimal"); jsonWriter.WriteValue(990.00990099m); jsonWriter.WriteEndObject(); jsonWriter.WriteValue(5); jsonWriter.WriteEndArray(); jsonWriter.WriteEndObject(); jsonWriter.WriteValue("This is a string."); jsonWriter.WriteNull(); jsonWriter.WriteNull(); jsonWriter.WriteEndArray(); } string json = sb.ToString(); JsonSerializer serializer = new JsonSerializer(); object jsonObject = serializer.Deserialize(new JsonTextReader(new StringReader(json))); sb = new StringBuilder(); sw = new StringWriter(sb); using (JsonWriter jsonWriter = new JsonTextWriter(sw) { Formatting = Formatting.Indented }) { serializer.Serialize(jsonWriter, jsonObject); } Assert.AreEqual(json, sb.ToString()); }
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(); } }
private void CreatePlaylist_BuildJson(string title, string description, IEnumerable<Song> songs, Stream stream) { using (var streamWriter = new StreamWriter(stream)) using (var jsonWriter = new JsonTextWriter(streamWriter)) { jsonWriter.WriteStartArray(); // [ // ["sessionId",1] jsonWriter.WriteStartArray(); jsonWriter.WriteValue(this.SessionId); jsonWriter.WriteValue(1); jsonWriter.WriteEndArray(); // [null, "Name", "Description", jsonWriter.WriteStartArray(); jsonWriter.WriteNull(); jsonWriter.WriteValue(title); jsonWriter.WriteValue(description); // [["Song-Guid", (int)songType], [...]] jsonWriter.WriteStartArray(); if (songs != null) { foreach (Song song in songs) { jsonWriter.WriteStartArray(); jsonWriter.WriteValue(song.ID); jsonWriter.WriteValue(song.Type); jsonWriter.WriteEndArray(); } } jsonWriter.WriteEndArray(); jsonWriter.WriteEndArray(); //] jsonWriter.WriteEndArray(); //] } }
private static void DumpOpCodes() { using (var output = new StreamWriter(@"C:\tsv\pets\vmjs\src\runtime\opcodes.js")) using (var writer = new JsonTextWriter(output) { Formatting = Formatting.Indented }) { var fields = typeof(OpCodes).GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.GetField); var opCodes = (from fi in fields select new {fi.Name, OpCode = (OpCode) fi.GetValue(null)}) .OrderBy(x => (uint) x.OpCode.Value) .ToArray(); Action<string, object> prop = (name, value) => { writer.WritePropertyName(name); writer.WriteValue(value); }; Action<string, string> propEnum = (name, value) => { writer.WritePropertyName(name); writer.WriteRawValue(value); }; Action<OpCode> dump = opCode => { writer.WriteStartObject(); prop("name", opCode.Name); prop("size", opCode.Size); prop("value", opCode.Value); propEnum("operand", "OperandType." + opCode.OperandType); propEnum("flow", "FlowControl." + opCode.FlowControl); propEnum("type", "OpCodeType." + opCode.OpCodeType); propEnum("pop", "StackBehaviour." + opCode.StackBehaviourPop); propEnum("push", "StackBehaviour." + opCode.StackBehaviourPush); writer.WriteEndObject(); }; var shortOpCodes = opCodes.Where(x => x.OpCode.Size == 1).ToDictionary(x => (int) x.OpCode.Value, x => x.Name); var longOpCodes = opCodes.Where(x => x.OpCode.Size > 1).ToDictionary(x => x.OpCode.Value & 0xff, x => x.Name); writer.WriteRaw("// warning: this file was auto generated!\n"); writer.WriteRaw("var OpCodes = "); writer.WriteStartObject(); foreach (var f in opCodes) { writer.WritePropertyName(f.Name); dump(f.OpCode); } writer.WriteEndObject(); writer.WriteRaw(";\n"); writer.WriteRaw("var ShortOpCodes = "); writer.WriteStartArray(); for (var i = 0; i <= 255; i++) { string name; if (shortOpCodes.TryGetValue(i, out name)) { writer.WriteRawValue("OpCodes." + name); } else { writer.WriteNull(); } } writer.WriteEndArray(); writer.WriteRaw(";\n"); var maxLongOpCode = longOpCodes.Keys.Max(); writer.WriteRawValue("var LongOpCodes = "); writer.WriteStartArray(); for (var i = 0; i <= maxLongOpCode; i++) { string name; if (longOpCodes.TryGetValue(i, out name)) { writer.WriteRawValue("OpCodes." + name); } else { writer.WriteNull(); } } writer.WriteEndArray(); writer.WriteRaw(";\n"); } }