Json使用DataContractJsonSerializer进行解析

时间:2013-02-07 21:32:34

标签: c# json

我使用 DataContractJsonSerializer 进行Json解析。 请告诉我如何解析这个json:

{"response":[2,{"mid":95001,"date":1360173495,"out":0,"uid":32578013,"read_state":0,"title":"Head","body":"message"}, {"mid":95000,"date":1360173439,"out":0,"uid":32506752,"read_state":0,"title":" Theme ","body":"message2"}]}

我无法理解我需要什么样的结构。我想写这个:

[DataContract]
internal class Message
{
    [DataMember]
    public int IntMember { get; set; } 

    [DataMember]
    public List<Messages> response { get; set; }        

    [DataContract]
    protected internal struct Messages
    {
        [DataMember]
        public string mid { get; set; }            
        [DataMember]
        public string uid { get; set; }            
        [DataMember]
        public string date { get; set; }           
        [DataMember]
        public string title { get; set; }     
        [DataMember]
        public string body { get; set; }       
    }
}

但这不起作用因为2开头。该怎么办?在解析之前删除这个号码,或者你可以清楚地忽略它?

2 个答案:

答案 0 :(得分:1)

不幸的是,您似乎无法使用内置的序列化程序来获取所需内容。该数组看起来像是包含一个整数作为其第一个元素,表示数组的长度,这不是标准的JSON,并且(正如您已经发现的那样)意味着该数组包含异构元素的列表。

对于像JSON.net

这样的更专用的JSON库,您可能会更幸运

答案 1 :(得分:0)

感谢问题解决了。在正则表达式的帮助下找到“不必​​要的数字”并删除

如果你需要这个数字:

@"(?<=response\D*)\d+"

如果您需要带逗号的数字:

@"(?<=response\D*)\d[^{]*"

然后替换

Replace(jsonString, RegEx);

感谢互联网,预订C#5.0和论坛Cyber​​Forum