2

このJSONを逆シリアル化するにはどうすればよいですか?

{"totalResult":3,"categories":[{"1":{"categoryName":"plumbers","categoryIconUrl":"","headingName":"plumbers"}},{"2":{"categoryName":"plumbing parts and accessories","categoryIconUrl":"","headingName":"plumbing parts and accessories"}},{"3":{"categoryName":"plumbing services","categoryIconUrl":"","headingName":"plumbing services"}}]} 

だから私はすでにいくつかのことを試しました...現在「totalResult」を取得できますが、他のデータを取得できません。現在取得している情報を取得するために使用するデータコントラクトは次のとおりです。

[DataContract]
public class categories_result
{
    [DataMember(Name="totalResult")]
    public int totalResult {get; set;}
    [DataMember(Name="categories")]
    public category[] results {get; set;}
}
[DataContract]
public class category
{
    [DataMember(Name="categoryName")]
    public string categoryName {get; set;}
    [DataMember(Name="categoryIconUrl")]
    public string categoryIconUrl {get; set;}
    [DataMember(Name="headingName")]
    public string headingName {get; set;}
}

結果として返されるカテゴリクラスに関しては、次のようになります。

-       results {TrudonMobile.category[3]}  TrudonMobile.category[]
-       [0] {WP7proj.category}  WP7proj.category
    categoryIconUrl Could not evaluate expression   string
    categoryName    Could not evaluate expression   string
    headingName Could not evaluate expression   string

何かが足りないような気がしますが、よくわかりません。

追加した:

これは便利かもしれないので、実際に逆シリアル化しようとしているコードを追加するかもしれないと思いました:>

            try
            {
                Stream responseStream = e.Result;
                DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(categories_result));
                categories_result response = (categories_result)ser.ReadObject(responseStream);

            }
            catch (Exception x)
            {
                string bob = x.ToString();
                return;
            }
4

2 に答える 2

2

Json.Netの使用

string json =
@"
{
    ""totalResult"": 3,
    ""categories"": [
        {
            ""1"": {
                ""categoryName"": ""plumbers"",
                ""categoryIconUrl"": """",
                ""headingName"": ""plumbers""
            }
        },
        {
            ""2"": {
                ""categoryName"": ""plumbing parts and accessories"",
                ""categoryIconUrl"": """",
                ""headingName"": ""plumbing parts and accessories""
            }
        },
        {
            ""3"": {
                ""categoryName"": ""plumbing services"",
                ""categoryIconUrl"": """",
                ""headingName"": ""plumbing services""
            }
        }
    ]
}
";

dynamic jObj = JsonConvert.DeserializeObject(json);

for (int i = 0; i < jObj.categories.Count; i++)
{
    Console.WriteLine(jObj.categories[i][(i+1).ToString()].categoryName);
}

//また

JObject jObj = (JObject)JsonConvert.DeserializeObject(json);

for (int i = 0; i < jObj["categories"].Count(); i++)
{
    Console.WriteLine(jObj["categories"][i][(i+1).ToString()]["categoryName"]);
}
于 2012-04-26T09:38:43.593 に答える
1

json.newtonsoftライブラリをお試しください

       string data = "@:{"totalResult":3,"categories":[{"1":{"categoryName":"plumbers","categoryIconUrl":"","headingName":"plumbers"}},{"2":{"categoryName":"plumbing parts and accessories","categoryIconUrl":"","headingName":"plumbing parts and accessories"}},{"3":{"categoryName":"plumbing services","categoryIconUrl":"","headingName":"plumbing services"}}]} ";


        JObject o = JObject.Parse(data);

        JArray alldata = (JArray)(o["category"]);

カテゴリクラスのメンバーにアクセスするには

       JObject first = (JObject)category[1];
于 2012-04-26T09:21:20.187 に答える