您的位置:首页 > Web前端 > JavaScript

C# 中使用JSON -DataContractJsonSerializer

2012-04-11 16:42 573 查看

C# 中使用JSON -DataContractJsonSerializer

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

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

http://www.json.org/

一、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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: