C# 中使用JSON

转载自http://www.cnblogs.com/vingi/articles/2578659.html

C#中使用JSON不需要使用第三方库,使用.NET Framwork3.5自带的System.Runtime.Serialization.Json即可很好的完成JSON的解析。

关于JSON的入门介绍见(首页的图很形象):

http://www.json.org/

一、Using

需要添加引用:System.ServiceModel.Web 和 System.Runtime.Serialization,然后使用Using

using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;


二、定义序列化的类

假如我们要转化的JSON字符串格式为:

{
    "encoding":"UTF-8",
    "plug-ins":["python","c++","ruby"],
    "indent":{
        "length":3,
        "use_space":true
    }
}


然后编写相应的序列化的类,注意下面类加的Attribute:

[DataContract(Namespace = "json")]
        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 = "json")]
        class Indent
        {
            [DataMember(Order = 0)]
            public int length { get; set; }

            [DataMember(Order = 1)]
            public bool useSpace { get; set; }
        }


 

三、对象转化为JSON字符串

使用WriteObject方法:

 

Config config = new Config()
            {
                encoding = "UTF-8",
                plugins = new string[] { "python", "C++", "C#" },
                indent = new Indent()
                {
                    length = 8,
                    useSpace = false
                }
            };
            DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Config));
            MemoryStream 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);

            //注释掉的部分可以用下面这句话代替,更简单了
            string dataString = Encoding.UTF8.GetString(stream.ToArray());
            stream.Close();

            Console.WriteLine("JSON string is:");
            Console.WriteLine(dataString); 


 

四、JSON字符串转对象

使用ReadObject方法:  

MemoryStream stream2 = new MemoryStream(Encoding.UTF8.GetBytes(dataString));
            DataContractJsonSerializer serializer2 = new DataContractJsonSerializer(typeof(Config));

            Config config2 = serializer2.ReadObject(stream2) as Config;
            stream2.Close();
            Console.WriteLine("Encoding is: {0}", config2.encoding);
            foreach (string plugin in config2.plugins)
            {
                Console.WriteLine("plugins is: {0}", plugin);
            }
            Console.WriteLine("indent.length is: {0}", config2.indent.length);
            Console.WriteLine("indent.use_space is: {0}", config2.indent.useSpace);


五、输出结果:


 


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值