3

Windows Phone 8 の Web サービスから json コードを取得します。サイト json2csharp ( http://json2csharp.com/ )のおかげで、エンティティ クラスを生成します。しかし、このような奇妙なjsonコードを持つWebサービスがあります。キーとしての番号付けがあります (0,1,2):

{
  "service": "MainMapService",
  "func": "getPlacesByAxes",
  "result": {
    "0": {
      "id": "13478",
      "date": "0",
      "id_cat": "1",
      "id_cat_sub": "0",
      "id_user": "0",
     },
    "2": {
      "id": "23272",
      "date": "0",
      "id_cat": "1",
      "id_cat_sub": "0",
      "id_user": "667"
    },
    "1": {
      "id": "21473",
      "date": "0",
      "id_cat": "1",
      "id_cat_sub": "0",
      "id_user": "0"
     }
   },
  "args": [
    "1",
    "50.8",
    "4.5",
    "1"
  ]
}

そして、json2csharp は次のようなクラスを生成します...数値の各クラス:

public class __invalid_type__0
{
    public string id { get; set; }
    public string date { get; set; }
    public string id_cat { get; set; }
    public string id_cat_sub { get; set; }
    public string id_user { get; set; }
}

public class __invalid_type__2
{
    public string id { get; set; }
    public string date { get; set; }
    public string id_cat { get; set; }
    public string id_cat_sub { get; set; }
    public string id_user { get; set; }
}

public class __invalid_type__1
{
    public string id { get; set; }
    public string date { get; set; }
    public string id_cat { get; set; }
    public string id_cat_sub { get; set; }
    public string id_user { get; set; }
}

public class Result
{
    public __invalid_type__0 __invalid_name__0 { get; set; }
    public __invalid_type__2 __invalid_name__2 { get; set; }
    public __invalid_type__1 __invalid_name__1 { get; set; }
}

public class RootObject
{
    public string service { get; set; }
    public string func { get; set; }
    public Result result { get; set; }
    public List<string> args { get; set; }
}

したがって、問題は番号付けキーにあり、いくつかの番号がある可能性があります。どうすればこれを解決できますか?Jsonコードを変更できません...

前もって感謝します

4

1 に答える 1

1

これはエレガントとは言えませんが、試してみてください。

だから、私の考えは何ですか:

2つのクラスを作成しました

RootObjectヘルパー

public class YourJsonClass
{
  public string service { get; set; }
  public string func { get; set; }
  public dynamic result { get; set; }
  public string[] args { get; set; }
}

resultヘルパー

public class Item
        {
            public string id { get; set; }
            public string date { get; set; }
            public string id_cat { get; set; }
            public string id_cat_sub { get; set; }
            public string id_user { get; set; }
        }

私は使用していますnewtonsoft json

 var m_res = JsonConvert.DeserializeObject<YourJsonClass>(YourJsonResponce);        
            foreach (dynamic numb in m_res.result)
            {

                string m_name = numb.Name; // it will be "1", "0" or whatever
                string h = numb.Value.ToString();
                var m_value = JsonConvert.DeserializeObject<Item>(h);

            }

...確かにもっと良い方法がありますが、これが役立つことを願っています(:

于 2013-04-17T15:05:34.153 に答える