特定对象的自定义序列化/反序列化

时间:2011-09-21 14:45:04

标签: .net serialization json.net

JSON - 我需要反序列化的对象具有以下形式:

{
   "typeName": 
     {
       "field1": "content1", 
       "field2": "content2" ...
     }
} 

基本上它意味着除了数组之外的每个对象都包含在包装器对象中,其中字段名称是包装对象的类型。创建特定子类的实例需要类型名称。我不能改变任何东西,但需要使用这个界面。我试着写一个自定义转换器,但我不知道如何区分类型信息与包装对象的正常字段名称。是否有可能以任何方式解决这个问题?

1 个答案:

答案 0 :(得分:1)

您的问题不是很明确,但我假设您的“typeNames”未修复。如果是这样,您可以使用Json.NET反序列化为字典,即:

    public void DeserializeSomeStuff()
    {
        const string json = @"{""typeName"":{""field1"": ""content1"",""field2"": ""content2""}}";
        var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(json);
        foreach (var kvp in obj)
        {
            Console.WriteLine("key={0}", kvp.Key);
            foreach (var kv in kvp.Value)
            {
                Console.WriteLine("    key={0} value={1}", kv.Key, kv.Value);
            }
        }

        // key=typeName
        //     key=field1 value=content1
        //     key=field2 value=content2
    }