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; }
}
需要用到数组[]
对了,请问能够在不绑定实体类的情况下反序列化吗? (排除正则表达式)
[解决办法]
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)然后直接按照名字取值就行
这样是不是就不需要实体类了?
[解决办法]
直接用json.net这个组件,引用linq to json,直接反序列化为一个JsonObject对象(这个类别相当于一个Hashtable)然后直接按照名字取值就行
这样是不是就不需要实体类了?
[解决办法]
嗯是的,在你不需要这些实体类的时候,只是取数据和更改数据的时候是很方便的
直接用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());
这样就可以了
[解决办法]
嗯是的,在你不需要这些实体类的时候,只是取数据和更改数据的时候是很方便的
直接用json.net这个组件,引用linq to json,直接反序列化为一个JsonObject对象(这个类别相当于一个Hashtable)然后直接按照名字取值就行
这样是不是就不需要实体类了?
查了一下没查到,能有个example吗?
再问一下,newtonsoft.json如何?
[解决办法]
给你贴个完整的吧
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;这个命名空间在你代码中
