读书人

C# 解析JSON,施用DataContractJsonSer

发布时间: 2013-08-01 15:23:18 作者: rapoo

C# 解析JSON,使用DataContractJsonSerializer类,求指点。
string html="{\"Table\":[{\"IssueNum\":\"20130725023\",\"Result\":\"0 3 7 9 1\",\"AwardTime\":\"2013-07-25 01:55\"},{\"IssueNum\":\"20130725022\",\"Result\":\"0 1 3 8 9\",\"AwardTime\":\"2013-07-25 01:50\"},{\"IssueNum\":\"20130725021\",\"Result\":\"9 4 5 5 0\",\"AwardTime\":\"2013-07-25 01:45\"},{\"IssueNum\":\"20130725020\",\"Result\":\"2 5 6 1 5\",\"AwardTime\":\"2013-07-25 01:40\"},{\"IssueNum\":\"20130725019\",\"Result\":\"1 5 2 6 8\",\"AwardTime\":\"2013-07-25 01:35\"},{\"IssueNum\":\"20130725018\",\"Result\":\"5 3 2 3 9\",\"AwardTime\":\"2013-07-25 01:30\"},{\"IssueNum\":\"20130725017\",\"Result\":\"9 3 6 7 4\",\"AwardTime\":\"2013-07-25 01:25\"},{\"IssueNum\":\"20130725016\",\"Result\":\"5 7 5 2 8\",\"AwardTime\":\"2013-07-25 01:20\"},{\"IssueNum\":\"20130725015\",\"Result\":\"2 7 0 3 9\",\"AwardTime\":\"2013-07-25 01:15\"},{\"IssueNum\":\"20130725014\",\"Result\":\"4 5 2 0 6\",\"AwardTime\":\"2013-07-25 01:10\"},{\"IssueNum\":\"20130725013\",\"Result\":\"8 7 7 5 7\",\"AwardTime\":\"2013-07-25 01:05\"},{\"IssueNum\":\"20130725012\",\"Result\":\"2 4 2 6 5\",\"AwardTime\":\"2013-07-25 01:00\"},{\"IssueNum\":\"20130725011\",\"Result\":\"9 6 4 8 8\",\"AwardTime\":\"2013-07-25 00:55\"},{\"IssueNum\":\"20130725010\",\"Result\":\"5 3 3 4 5\",\"AwardTime\":\"2013-07-25 00:50\"},{\"IssueNum\":\"20130725009\",\"Result\":\"3 8 3 1 3\",\"AwardTime\":\"2013-07-25 00:45\"},{\"IssueNum\":\"20130725008\",\"Result\":\"5 6 8 7 8\",\"AwardTime\":\"2013-07-25 00:40\"},{\"IssueNum\":\"20130725007\",\"Result\":\"8 1 3 7 9\",\"AwardTime\":\"2013-07-25 00:35\"},{\"IssueNum\":\"20130725006\",\"Result\":\"6 2 4 8 4\",\"AwardTime\":\"2013-07-25 00:30\"},{\"IssueNum\":\"20130725005\",\"Result\":\"3 4 3 9 5\",\"AwardTime\":\"2013-07-25 00:25\"},{\"IssueNum\":\"20130725004\",\"Result\":\"8 5 5 8 0\",\"AwardTime\":\"2013-07-25 00:20\"},{\"IssueNum\":\"20130725003\",\"Result\":\"9 4 4 2 9\",\"AwardTime\":\"2013-07-25 00:15\"},{\"IssueNum\":\"20130725002\",\"Result\":\"3 6 1 2 0\",\"AwardTime\":\"2013-07-25 00:10\"},{\"IssueNum\":\"20130725001\",\"Res
ult\":\"5 6 0 2 4\",\"AwardTime\":\"2013-07-25 00:05\"}]}"

//
public static string GetJson(string html)
{
SSCSerialize ssc = new SSCSerialize(); //实体类名
var json = ConvertJson(html,ssc.GetType()); // 解析JSON


return json.ToString();
}

//解析JSON
private static object ConvertJson(string json,Type t)
{
try
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(t);
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
{
return serializer.ReadObject(ms);

}
}
catch (Exception ex)
{
throw ex;
}
}

//实体类
[DataContract]
public class SSCSerialize
{
[DataMember]
public string IssueNum { get; set; }
[DataMember]
public string Result { get; set; }
[DataMember]
public string AwardTime { get; set; }
}

解析出来是FromData.IEnumerable.SSCSerialize类名.
C# JSON HTML String


[解决办法]

[DataContract]
public class jsontext
{
[DataMember(Order = 0, IsRequired = true)]
public content Table { get; set; }
}

[DataContract]
public class content
{
[DataMember(Order = 0, IsRequired = true)]
public int IssueNum { get; set; }

[DataMember(Order = 1, IsRequired = true)]
public int Result { get; set; }

[DataMember(Order = 2, IsRequired = true)]
public string AwardTime { get; set; }
}



解析的时候直接用绑定jsontext这类就可以,你试试看可不可以?
[解决办法]
引用:
[DataContract]
public class jsontext
{
[DataMember(Order = 0, IsRequired = true)]
public content[] Table { get; set; }
}


需要用到数组[]
[解决办法]
引用:
Quote: 引用:

[DataContract]
public class jsontext
{
[DataMember(Order = 0, IsRequired = true)]


public content[] Table { get; set; }
}


需要用到数组[]

是的,写太快了,写错了,谢谢指正
[解决办法]
引用:
Quote: 引用:

[DataContract]
public class jsontext
{
[DataMember(Order = 0, IsRequired = true)]
public content[] Table { get; set; }
}


需要用到数组[]


对了,请问能够在不绑定实体类的情况下反序列化吗? (排除正则表达式)
[解决办法]

using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(html)))
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(ParentSerialize));
ParentSerialize items = (ParentSerialize)serializer.ReadObject(ms);

}
[DataContract]
public class ParentSerialize
{
[DataMember]
public List<SSCSerialize> Table
{ get; set; }
}
//实体类
[DataContract]
public class SSCSerialize
{

[DataMember]
public string IssueNum { get; set; }
[DataMember]
public string Result { get; set; }
[DataMember]
public string AwardTime { get; set; }
}

[解决办法]
引用:
直接用json.net这个组件,引用linq to json,直接反序列化为一个JsonObject对象(这个类别相当于一个Hashtable)然后直接按照名字取值就行


这样是不是就不需要实体类了?
[解决办法]
引用:
Quote: 引用:

直接用json.net这个组件,引用linq to json,直接反序列化为一个JsonObject对象(这个类别相当于一个Hashtable)然后直接按照名字取值就行

这样是不是就不需要实体类了?
嗯是的,在你不需要这些实体类的时候,只是取数据和更改数据的时候是很方便的
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

直接用json.net这个组件,引用linq to json,直接反序列化为一个JsonObject对象(这个类别相当于一个Hashtable)然后直接按照名字取值就行

这样是不是就不需要实体类了?
嗯是的,在你不需要这些实体类的时候,只是取数据和更改数据的时候是很方便的

查了一下没查到,能有个example吗?
再问一下,newtonsoft.json如何?
[解决办法]
举个列子吧,比如string json = "{\"Name\" : \"Jack\", \"Age\" : 34, \"Colleagues\" : [{\"Name\" : \"Tom\" , \"Age\":44},{\"Name\" : \"Abel\",\"Age\":29}] }";这样的一个json字符串,JObject jObj = JObject.Parse(json);
//通过属性名或者索引来访问,仅仅是自己的属性名,而不是所有的
JToken ageToken = jObj["Age"];
Console.WriteLine(ageToken.ToString());
这样就可以了
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

直接用json.net这个组件,引用linq to json,直接反序列化为一个JsonObject对象(这个类别相当于一个Hashtable)然后直接按照名字取值就行

这样是不是就不需要实体类了?
嗯是的,在你不需要这些实体类的时候,只是取数据和更改数据的时候是很方便的

查了一下没查到,能有个example吗?
再问一下,newtonsoft.json如何?
newtonsoft.json就是json.net
[解决办法]
给你贴个完整的吧
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using Newtonsoft.Json.Linq;

namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
string json = "{\"Name\" : \"Jack\", \"Age\" : 34, \"Colleagues\" : [{\"Name\" : \"Tom\" , \"Age\":44},{\"Name\" : \"Abel\",\"Age\":29}] }";


JObject jObj = JObject.Parse(json);
JToken ageToken = jObj["Age"];
Console.WriteLine(ageToken.ToString());
Console.Read();
}
}
}
(注意上面要先引用Newtonsoft.Json.dll这个组件进来,然后引用using Newtonsoft.Json.Linq;这个命名空间在你代码中

读书人网 >C#

热点推荐