0

ASP.NET サーバーでネストされた JSON オブジェクトを変換しようとしています。着信 JSON 文字列は次のようになります -

data: {
   user_id: 1,
   taskid: "1234",
   list: {
       "item-1": { one: 1, two: 2 },
       "item-2": { one: 1, two: 2 }   
       //.. where number of items is unknown
   }
}

JSON.Decode this wayを使用してデータをデコードしようとしました

public class Data {
    public int user_id { get; set; }
    public string taskid { get; set; }
    public List<object> list { get; set; }
}

public class DataList {
    List<Data> data { get; set; }
}

// if isPost etc..

var decodedData = JSON.Decode<DataList>(Request["data"])

しかし、decodedData を反復しようとすると、エラーが発生します -

'ASP._Page_that_cshtml.DataList' には 'GetEnumerator' のパブリック定義が含まれていないため、foreach ステートメントはタイプ 'ASP._Page_that_cshtml.DataList' の変数を操作できません。

この方法でdecodedDataをリストにキャストしようとすると-

List<Data> decodedData = JSON.Decode<DataList>(Request["data"])

別のエラーをスローします

CS0030: タイプ ' ASP._Page_that_cshtml.DataList' を ' ' にSystem.Collections.Generic.List<ASP._Page_that_cshtml.DataList>変換できません

ネストされた JSON オブジェクトを C# オブジェクトに変換し、それを反復処理する適切な方法を提案していただけますか?

PS: 末尾のセミコロンは意図的に省略されています

4

5 に答える 5

2
List<Data> decodedData = JSON.Decode<DataList>(Request["data"])

あるべき

var decodedData = JSON.Decode<List<Data>>(Request["data"])
var myDataList = new DataList() { data = decodedData; }
于 2013-03-18T16:24:10.440 に答える
1

あなたが得ている最初のエラーはまったく正しいです.あなたのクラスには foreach ステートメントに必要なDataList定義が含まれていません. GetEnumeratorプロパティを反復処理する必要があるため、decodedData.data を反復処理します。

2 番目のエラーも正しいです。DataList を List の型にキャストしようとしているのですが、C# にはどうすればよいかわかりません。ここでも DataList を作成してから、プロパティ データを List 型に設定する必要があります。

于 2013-03-18T16:23:53.143 に答える
1

あなたの例は有効な jsonではありません。[]リストのコレクションが必要です。

data: {
    "user_id": 1,
    "taskid": "1234",
    "list": [
        {
            "one": 1,
            "two": 2
        },
        {
            "one": 1,
            "two": 2
        }
    ]
}
于 2013-03-18T16:23:26.897 に答える
1

decodedData.data代わりに繰り返してみてください。

decodedDataDataListであり、DataListクラスには であるメンバーdataがありList<Data>ます。 List<Data>の要求に応じて、 にはGetEnumeratorメソッドがありforeachます。

GetEnumeratorまたは、次のメソッドを追加することもできますDataList

public IEnumerator GetEnumerator() { return data.GetEnumerator(); }
于 2013-03-18T16:22:14.963 に答える
0

JSON を Data オブジェクトの配列にデコードしてから、その配列で ToList() 拡張メソッドを呼び出すことができます。

var dataArray = JSON.Decode<Data[]>(Request["data"]);
var list = dataArray.ToList();
于 2013-03-18T16:25:26.177 に答える