【问题标题】:Creating a class for JSON deserialization为 JSON 反序列化创建一个类
【发布时间】:2009-12-05 00:11:30
【问题描述】:

考虑以下 JSON:

{
    "Code": 2, 
    "Body": {
        "Dynamic-Key": {
            "Key1": "Val1", 
            "Key2": "Val2"
        }
    }
}

定义以下类结构:

[DataContract]
class JsonResponse
{
    [DataMember]
    public string  Code { get; set; }
    [DataMember]
    public JsonResponseBody Body { get; set; }
}
[DataContract]
class JsonResponseBody
{
    [DataMember(Name = "Dynamic-Key")]
    public DynamicKeyData Data { get; set; }
}
[DataContract]
class DynamicKeyData
{
    [DataMember]
    public string Key1 { get; set; }
    [DataMember]
    public string Key2 { get; set; }
}

我可以使用以下代码反序列化给定的 JSON:

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(JsonResponse));
JsonResponse responseData = serializer.ReadObject(responseStream) as JsonResponse;

但在我的情况下,“Dynamic-Key” 是未知的,由用户输入值定义。 处理这种 JSON 定义的正确方法是什么?

注意事项:

JSON 是第三方 Api,因此无法更改它。

在我的情况下,我不关心动态键名称,所以如果有一个选项可以始终映射到一个通用名称,它将完成这项工作。

提前致谢。

【问题讨论】:

    标签: c# .net json serialization


    【解决方案1】:

    你确定需要使用 WCF 吗?否则,我建议您查看Json.NET。有很多扩展机制,比如Contract Resolvers

    【讨论】:

      【解决方案2】:

      将 JSON 存储在一个字符串中,假设在 strResult 中。 然后可以反序列化成JsonResponse对象,如下:

      JsonConvert 是 Newtonsoft.Json.JsonConvert dll 中的类。您可以按如下方式使用它:

      JsonResponse object= (JsonResponse)JsonConvert.DeserializeObject(strResult,  typeof(JsonResponse));
      

      【讨论】:

        猜你喜欢
        • 2016-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-16
        相关资源
        最近更新 更多