如何反序列化此类数据结构

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何反序列化此类数据结构相关的知识,希望对你有一定的参考价值。

这是我的JSON:

"Dt": {    
    "20171021": {    
      "abc": "-"    
    },    
    "20171022": {    
      "abc": "-"    
    },    
    "20171023": {    
      "abc": "-"    
    },    
    "20171024": {    
      "abc": "-"    
    },    
    "20171025": {    
      "abc": "-"    
    }
}

Dt内的属性都是动态的。它们都是日期,但是以字符串格式。所以我在想如果我需要一个List对象,但是JSON.Net如何将它映射到List?我在想类结构类似于:

public class Dt
{
    public List<RealDate> RealDates { get; set;}
}

public class RealDate
{
    public string Date{ get; set;} //to hold "20171021"

    public Tuple<string, string> Keys {get; set;} // to hold abc as Key1 and - as Key2
}

任何帮助表示赞赏。

答案

看起来没有Dt,而且目前有Dt的东西应该具有:

public Dictionary<string, Foo> Dt { get; set;}

其中Foo是:

class Foo {
    public string abc {get;set}
}

然后,您将对此进行后处理,以将DTO模型(序列化模型)转换为实际模型。

请记住:任何时候序列化数据看起来与您的域模型之间存在细微差别:添加DTO模型,只需手动映射它们。它会拯救你的理智。

另一答案

你的json无效(括号丢失),但是下面是json

{
    "Dt": {
        "20171021": {
            "abc": "-"
        },
        "20171022": {
            "abc": "-"
        },
        "20171023": {
            "abc": "-"
        },
        "20171024": {
            "abc": "-"
        },
        "20171025": {
            "abc": "-"
        }
    }
}

可以反序列化为以下对象:

public class Model
{
    [JsonProperty("Dt")]
    public Dictionary<string, Value> Data { get; set; }
}

public class Value
{
    [JsonProperty("abc")]
    public string Abc { get; set; }
}

测试代码:

string json = @"{
    ""Dt"": {    
    ""20171021"": {    
      ""abc"": ""-""    
    },    
    ""20171022"": {    
      ""abc"": ""-""    
    },    
    ""20171023"": {    
      ""abc"": ""-""    
    },    
    ""20171024"": {    
      ""abc"": ""-""    
    },    
    ""20171025"": {    
      ""abc"": ""-""    
    }
}
}";

var model = JsonConvert.DeserializeObject<Model>(json);

以上是关于如何反序列化此类数据结构的主要内容,如果未能解决你的问题,请参考以下文章

csharp 此类演示了将对象序列化和反序列化为xml字符串的方法

利用Java反序列化漏洞在Windows上的挖矿实验

无法反序列化泛型类型的集合

使用特殊字符反序列化 XML 的快速方法

fastjson(1.2.58)支持多态结构的序列化、反序列化

带你掌握java反序列化漏洞及其检测