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

JSON.NETをダウンロードして、次を使用します。

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

これにより、List タイプの JArray オブジェクトが返されます。

于 2013-10-30T09:27:00.913 に答える
3

XML-Data 用に作成された DataContractSerializer を使用しています。
http://msdn.microsoft.com/de-de/library/system.runtime.serialization.datacontractserializer(v=vs.100).aspx

JSON-Data の場合は、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 に答える
0

json 配列の結果を 1 つの item 要素で解析しようとします。

正しい行は次のとおりだと思います:

...
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 に答える