0

これが私なのか、取得している JSON なのかわかりません。とにかく、私は関連性があると思ったこの他の記事を読んでいましたが、json c#の問題を解決するために必要なことを彼が理解したときに、彼らが何について話しているのかわかりませんでした

ここに私が今得ているJSONのサンプルがあります

{
    "totalResult": 2,
    "merchants": {
        "1718167": {
            "merchantRank": "29",
            "merchantName": "bob the builders factory",
            "merchantSlogan": "if he can't fix it we can",
            "merchantBdesc": "",
            "merchantLogo": "pic1.gif",
            "merchantLink": "http:\/\/www.randomlink.com\/",
            "merchantAddress": "place
street St
area
city
1111",
            "merchantLat": "-15.9935425",
            "merchantLng": "58.0836955",
            "merchantGeoLevel": "st",
            "merchantDistance": "0.00",
            "merchantCategories": "builder",
            "merchantEmail": "",
            "merchantUrl": "http:\/\/www.randomlink.com\/",
            "merchantPhone": "0123456789",
            "merchantMobile": "",
            "merchantSrc": "AJF"
        },
        "113711": {
            "merchantRank": "229",
            "merchantName": "A A A Builders",
            "merchantSlogan": "",
            "merchantBdesc": "",
            "merchantLogo": "pic26.gif",
            "merchantLink": "http:\/\/www.randomlink.com\/",
            "merchantAddress": "",
            "merchantLat": "",
            "merchantLng": "",
            "merchantGeoLevel": "",
            "merchantDistance": "0.00",
            "merchantCategories": "Builder",
            "merchantEmail": "here@randomlink.com",
            "merchantUrl": "http:\/\/randomlink.com",
            "merchantPhone": "0123456789",
            "merchantMobile": "",
            "merchantSrc": "GHF"
        }
    }
}

とにかく、正気のために結果の数を減らしたので、このためのデータ コントラクトを構築しようとしましたが、以前に発生した問題に遭遇しました。しかし、今回は違います...

[DataContract] を使用して totalResult を取得できますが、マーチャントを取得するためにエラーが発生し続けます...「113711」と「113711」は動的であるため、データモデルの作成に問題が発生すると思います。ですから、辞書があればこの問題は解決するのではないかと考えました。しかし、私はそれを試みるたびにエラーが発生します!!

これが私が使用しようとしたものです:

[DataContract]
public class result
{
    [DataMember(Name = "totalResult")]
    public string totalResult { get; set; }
    [DataMember(Name = "merchants")]
    public Dictionary<string, metchant_info> merchants { get; set; }
}
[DataContract]
public class metchant_info
{
    [DataMember(Name = "merchantRank")]
    public string merchantRank;
    [DataMember(Name = "merchantName")]
    public string merchantName;
    [DataMember(Name = "merchantSlogan")]
    public string merchantSlogan;
    [DataMember(Name = "merchantBdesc")]
    public string merchantBdesc;
    [DataMember(Name = "merchantLogo")]
    public string merchantLogo;
    [DataMember(Name = "merchantLink")]
    public string merchantLink;
    [DataMember(Name = "merchantAddress")]
    public string merchantAddress;
    [DataMember(Name = "merchantLat")]
    public string merchantLat;
    [DataMember(Name = "merchantLng")]
    public string merchantLng;
    [DataMember(Name = "merchantGeoLevel")]
    public string merchantGeoLevel;
    [DataMember(Name = "merchantDistance")]
    public string merchantDistance;
    [DataMember(Name = "merchantCategories")]
    public string merchantCategories;
    [DataMember(Name = "merchantEmail")]
    public string merchantEmail;
    [DataMember(Name = "merchantUrl")]
    public string merchantUrl;
    [DataMember(Name = "merchantPhone")]
    public string merchantPhone;
    [DataMember(Name = "merchantMobile")]
    public string merchantMobile;
    [DataMember(Name = "merchantSrc")]
    public string merchantSrc;
}

これがコードビハインドです...

            try
            {
                Stream responseStream = e.Result;
                DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(result));
                result response = (result)ser.ReadObject(responseStream);
            }
            catch (Exception ex)
            {
                return;
            }

現在発生しているエラーは次のとおりです。

"Could not evaluate expression"

スタックトレースが必要な場合は投稿しますが、かなり大量の役に立たない情報です...また、データメンバー Merchants を文字列に変更すると、次のエラーが表示されます。

"System.Collections.Generic.Dictionary`2[System.String,System.Object]"

それで... 何か考えはありますか?

4

2 に答える 2

3

Json.Netを使用すると、以下のようにケースを動的に処理できます

var obj = (JObject)JsonConvert.DeserializeObject(json);

foreach (var item in obj["merchants"])
{
    Console.WriteLine(item.First()["merchantName"]);
}

または、ループ内のオブジェクトにそれぞれmerchantを逆シリアル化できますmetchant_info

foreach (var item in obj["merchants"])
{
    var m = JsonConvert.DeserializeObject<metchant_info>(item.First().ToString());
    Console.WriteLine(m.merchantName);
}
于 2012-05-02T12:47:36.023 に答える
0

実用的な解決策はありませんが、少し調べてみると、次の情報が見つかりました。

この質問を見てください:C#.NET(win7電話)の「DataContractJsonSerializer」を含む「ネストされた」Jsonファイルをどのように読み込むのですか?問題は

public Dictionary<string, metchant_info> merchants { get; set; }

シリアライザーが辞書を処理する方法に問題があるようです:DataContractJsonSerializerの逆シリアル化の問題

DataContractJsonSerializerに辞書を適切にシリアル化させる方法はありますか?

あなたがそれを理解できることを願っています。

于 2012-05-03T06:54:45.207 に答える