0

我想使用 c# 在 asp.net 中解析这个 json 数组这是一个要解析的示例 Json 数据:

[
    {
        "idvisit":"3",
        "iduser":"shoaibshakeel",
        "idpage":"1",
        "pagetime":"0"
    },
    {
        "idvisit":"4",
        "iduser":"shoaibshakeel",
        "idpage":"2",
        "pagetime":"28"
    },
    {
        "idvisit":"5",
        "iduser":"shoaibshakeel",
        "idpage":"3",
        "pagetime":"0"
    }
]

这是我目前在我的代码文件中做的:

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Text;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string jsonData = Request.Form[0];
        Response.Write(jsonData);
        Response.Write("<br/>");
        PiwikDbData[] visitlist;

        //deserialize json array
        using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(jsonData)))
        {
            DataContractSerializer serializer = new DataContractSerializer(typeof(PiwikDbData));

            visitlist = serializer.ReadObject(stream) as PiwikDbData[];
        }

        Response.Write(visitlist.Length);
    }

}

[DataContract]
class PiwikDbData
{
    [DataMember(Name = "idvisit", IsRequired = true)]
    public int idvisit;

    [DataMember(Name = "iduser", IsRequired = true)]
    public string iduser;

    [DataMember(Name = "idpage", IsRequired = true)]
    public int idpage;

    [DataMember(Name = "pagetime", IsRequired = true)]
    public int pageTime;
}

我在这里做错了什么。visitlist = serializer.ReadObject(stream) as PiwikDbData[]; 非常感谢它在帮助下显示“根级别的数据无效” 。谢谢。

4

4 回答 4

3

您正在使用为 XML-Data 制作的 DataContractSerializer。
http://msdn.microsoft.com/de-de/library/system.runtime.serialization.datacontractserializer(v=vs.100).aspx

对于 JSON 数据,您应该使用 DataContractJsonSerializer:http:
//msdn.microsoft。 com/de-de/library/system.runtime.serialization.json.datacontractjsonserializer.aspx

您也尝试反序列化单个项目
new DataContractSerializer(typeof(PiwikDbData));
但您真正需要的是项目列表
new DataContractSerializer(typeof(PiwikDbData[]));


这就是我的代码的样子:

string jsonData = Request.Form[0];
Response.Write(jsonData);
Response.Write("<br/>");
PiwikDbData[] visitlist;

//deserialize json array
using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(jsonData)))
{
    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(PiwikDbData[]));
    visitlist = (PiwikDbData[])serializer.ReadObject(stream);
}

Response.Write(visitlist.Length);
于 2013-10-30T09:26:40.557 回答
3

只需下载JSON.NET,然后使用:

var wikiData = JsonConvert.DeserializeObject<List<PiwikDbData>>(jsonData);

这应该返回一个 JArray 对象,它将是 List 类型。

于 2013-10-30T09:27:00.913 回答
0

您尝试使用一个 item 元素解析 json 数组结果。

我认为正确的行是:

...
using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(jsonData)))
{
   DataContractSerializer serializer = new DataContractSerializer(typeof(List<PiwikDbData>));

   List<PiwikDbData>visitlist = serializer.ReadObject(stream);
}
...
于 2013-10-30T09:25:16.013 回答
0

使用以下代码:

    //deserialize json array
    using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(jsonData)))
    {
        var serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(PiwikDbData[]));

        visitlist = serializer.ReadObject(stream) as PiwikDbData[];
    }

    Response.Write(visitlist.Length);
于 2013-10-30T09:58:46.020 回答