C#中使用JSON不需要使用第三方库,使用.NET Framwork3.5自带的System.Runtime.Serialization.Json即可很好的完成JSON的解析。 关于JSON的入门介绍见(首页的图很形象): 一、Using需要添加引用:System.ServiceModel.Web 和 System.Runtime.Serialization,然后使用Using: using System.Runtime.Serialization.Json; using System.Runtime.Serialization; 二、定义序列化的类假如我们要转化的JSON字符串格式为: { "encoding":"UTF-8", "plug-ins":["python","c++","ruby"], "indent":{ "length":3, "use_space":true } } 然后编写相应的序列化的类,注意下面类加的Attribute: [DataContract(Namespace = "http://coderzh.cnblogs.com")] class Config { [DataMember(Order = 0)] public string encoding { get; set; } [DataMember(Order = 1)] public string[] plugins { get; set; } [DataMember(Order = 2)] public Indent indent { get; set; } } [DataContract(Namespace = "http://coderzh.cnblogs.com")] class Indent { [DataMember(Order = 0)] public int length { get; set; } [DataMember(Order = 1)] public bool use_space { get; set; } } 三、对象转化为JSON字符串使用WriteObject方法: var config = new Config(){ encoding = "UTF-8", plugins = new string[]{"python", "C++", "C#"}, indent = new Indent(){ length = 4, use_space = false} }; var serializer = new DataContractJsonSerializer(typeof(Config)); var stream = new MemoryStream(); serializer.WriteObject(stream, config); byte[] dataBytes = new byte[stream.Length]; stream.Position = 0; stream.Read(dataBytes, 0, (int)stream.Length); string dataString = Encoding.UTF8.GetString(dataBytes); Console.WriteLine("JSON string is:"); Console.WriteLine(dataString); 四、JSON字符串转对象使用ReadObject方法: var mStream = new MemoryStream(Encoding.Default.GetBytes(dataString)); Config readConfig = (Config)serializer.ReadObject(mStream); Console.WriteLine("Encoding is: {0}", readConfig.encoding); foreach (string plugin in readConfig.plugins) { Console.WriteLine("plugins is: {0}", plugin); } Console.WriteLine("indent.length is: {0}", readConfig.indent.length); Console.WriteLine("indent.use_space is: {0}", readConfig.indent.use_space); 五、输出结果:JSON string is: {"encoding":"UTF-8","plugins":["python","C++","C#"],"indent":{"length":4,"use_space":false}} Encoding is: UTF-8 plugins is: python plugins is: C++ plugins is: C# indent.length is: 4 indent.use_space is: False |
|