1

次のようなjson応答があります

{
  "appStatus":{
    "status":true
  },
  "lastSyncDate":"06-07-2013 13.54.27",
  "configResponse":{
    "status":{
      "status":true
    },
    "configs":{
      "APPLOGENABLED":{
        "configCode":"APPLOGENABLED",
        "configDesc":"enable or disable logging from front end",
        "configType":"TAB",
        "configValue":"Y"
      },
      "COMMENTSTIMER":{
        "configCode":"COMMENTSTIMER",
        "configDesc":"timer for comments in seconds",
        "configType":"TAB",
        "configValue":"60"
      },
      "SUMMARYTIMER":{
        "configCode":"SUMMARYTIMER",
        "configDesc":"timer for summary in seconds",
        "configType":"TAB",
        "configValue":"30"
      },
      "ALERTSTIMER":{
        "configCode":"ALERTSTIMER",
        "configDesc":"timer for alerts in seconds",
        "configType":"TAB",
        "configValue":"60"
      }
    },
    "lastSyncDate":"06/07/2013 13.48.13"
  }
}

configResponsejson.NET を使用して、辞書に抽出したいと考えています。このような Dictionary オブジェクトを直接変換できることはわかっています

  JsonConvert.DeserializeObject<Dictionary<string,string>>().... 

しかしconfigResponse、サブ要素であるため、必要に応じて解析できません。

上記のjsonレスポンスを次のようにデシリアライズしたい

public class ConfigResponse
{
    public Status status { get; set; }
    public Dictionary<string, ConfigurationItem> configs { get; set; }
    public string lastSyncDate { get; set; }
}

public class ConfigurationItem
{
    public String configCode { get; set; }
    public String configDesc { get; set; }
    public String configType { get; set; }
    public String configValue { get; set; }
}
4

2 に答える 2

4

JSON 文字列を に解析しJObject、サブオブジェクト「configResponse」を取得してから、それを に逆シリアル化できConfigResponseます。次の 1 行のコードです。

JObject.Parse("{...}")["configResponse"].ToObject<ConfigResponse>()

逆シリアル化オプションを設定するためにカスタム シリアライザーが必要な場合は、それをToObject<T>()メソッドに渡すことができます。

于 2013-07-07T07:32:07.677 に答える
-1

私はこの方法しか使用していませんが、うまくいきました。

 await JsonConvert.DeserializeObjectAsync<ConfigResponse>(jsontoobject, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
于 2013-07-06T13:14:50.623 に答える