为JSON反序列化创建一个类

时间:2009-12-05 00:11:30

标签: c# .net json serialization

考虑以下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,因此更改它不是一种选择。

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

提前致谢。

2 个答案:

答案 0 :(得分:3)

你肯定需要使用WCF吗?否则我建议查看Json.NET。有许多可扩展性机制,例如Contract Resolvers

答案 1 :(得分:0)

将JSON存储在strResult中假设的字符串中。 然后,您可以将其反序列化为JsonResponse对象,如下所示:

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

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