2

一部のjsonをC#で逆シリアル化する際に問題が発生します。

これが私が送信されているjsonのスニペットであると仮定します(何度も繰り返されますが、id / name以外は何もありません):

[
    {
    "id":0,
    "name":"N/A"
    },
    {
        "id":1,            
        "name":"Annie"            
    },
    {
        "id":2,            
        "name":"Olaf"            
    }    
]

トップレベルに名前が付けられたら、私は次のようなことをします

[DataContract]
public class ChampList
{
    [DataMember(Name = "SOMENAME")]
    public ElophantChamp[] ElophantChamps { get; set; }
}

[DataContract]
public class ElophantChamp
{
    [DataMember(Name = "id")]
    public int ID { get; set; }

    [DataMember(Name = "name")]
    public string Name { get; set; }

}

次に、これを呼び出して逆シリアル化します。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(ChampList));
object objResponse = jsonSerializer.ReadObject(response.GetResponseStream());
ChampList jsonResults = objResponse as ChampList;

しかし、トップレベルのコンテナオブジェクトがなく、空白のデータメンバー名を使用できない場合はどうすればよいですか?DataMemberに名前を付けないでおくと(つまり、[DataMember]のままにしておくと)null値が返されます。これは、正しく解析できなかったことを示します。

エラーはスローされず、応答ストリームには私が期待するものが正確に入力されます。

私が周りを探し回ることと基本的な推論を知ることができることから、私は必要な場所からそれほど遠くないはずです。その最高レベルの処理で私が間違っていることがあります。

4

1 に答える 1

3

親クラスのChampListがなくても機能しますか?

DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(ElophantChamp[]));
object objResponse = jsonSerializer.ReadObject(response.GetResponseStream());
ElophantChamp[] jsonResults = objResponse as ElophantChamp[];
于 2012-11-22T05:49:51.813 に答える