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

C#处理Json数据/Json数据转为对象

2014-03-27 15:21 423 查看
From:http://www.cnblogs.com/Gun-N-Rose/archive/2012/09/28/2707053.html

 

下面我将通过如何用c#的DataContractSerializer将这条记录反序列化。

首先你得分析这条记录的结构,然后建出与结构相符的类出来。记得加上reference:

using System.Runtime.Serialization.Json;

using System.Runtime.Serialization;

建出来之后,要在类定义前加上[DataContract],类里的成员前加[DataMember]

[DataContract]
public class Thumbnail
{
[DataMember]
public int Width { get; set; }
[DataMember]
public int Height { get; set; }
[DataMember]
public int FileSize { get; set; }

}

[DataContract]

public class Record

{

[DataMember]
public int Width { get; set; }
[DataMember]
public int Height { get; set; }
[DataMember]
public int FileSize { get; set; }

[DataMember]

public Thumbnail thumbnail{get;set;}

}

按理说,上面这样的话就算建好了,我本来也是这样认为的,但是总是得不到结果,网上也查不到为什么。最后,终于从一个写过这个的同学那里得知,原来DataContractSerializer并不能主动将json数据中得各项对应到你建的类中,还需要写清是哪一个。

所以上面对应到那条json的记录,应该这样写:

[DataContract]
public class Thumbnail
{
[DataMember(Name = "Width")]
public int Width { get; set; }
[DataMember(Name = "Height")]
public int Height { get; set; }
[DataMember(Name = "FileSize")]
public int FileSize { get; set; }

}

[DataContract]

public class Record

{

[DataMember(Name = "Width")]
public int Width { get; set; }
[DataMember(Name = "Height")]
public int Height { get; set; }
[DataMember(Name = "FileSize")]
public int FileSize { get; set; }

[DataMember(Name = "Thumbnail")]

public Thumbnail thumbnail{get;set;}

}

好了,如果你已经建好了你的实体类,下面如何将Json的数据反序列化?

public static T parse<T>(string jsonString)
{

DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
ms.Position = 0;
T jsonObject = (T)ser.ReadObject(ms);
return jsonObject;

}


 

调用:

Record record=parse<Record>(jsontext);

好了,如果没错的话,上面的那条json的记录已经转化成你可以直接用的Record的。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息