首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# 解析JSON,施用DataContractJsonSerializer类,求指点

2013-08-01 
C# 解析JSON,使用DataContractJsonSerializer类,求指点。string html{\Table\:[{\IssueNum\:\201307

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;这个命名空间在你代码中

热点排行