加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

序列化 – Json.NET可以使用点符号反序列化一个扁平化的JSON字符

发布时间:2020-12-16 19:52:18 所属栏目:百科 来源:网络整理
导读:我有一个扁平的 JSON: { "CaseName" : "John Doe v. State","CaseDate" : "some date","Client.FirstName" : "John","Client.LastName" : "Doe","Client.Email" : "johndoe@gmail.com" etc...} 我想反序列回这个实体: public class Case(){ public string
我有一个扁平的 JSON:
{
    "CaseName" : "John Doe v. State","CaseDate" : "<some date>","Client.FirstName" : "John","Client.LastName" : "Doe","Client.Email" : "johndoe@gmail.com"
    etc...
}

我想反序列回这个实体:

public class Case()
{
    public string CaseName { get; set; }
    public string CaseDate { get; set; }
    public Client Client { get; set; }
}

Client.FirstName,Client.LastName和Client.Email是Client对象中的属性.使用Json.NET,有没有办法得到它解析点符号和反序列化这个实体正确?目前,使用默认设置,它告诉我Client.FirstName不是Case类型的一个属性.

是的你可以.您将从 JsonConverter导出一个类,并将 CanConvert方法替换为可以转换客户端类型的标记.

然后,您将覆盖ReadJsonWriteJson方法来读取和写入JSON文字的字段.

对于像这样的JSON文字,您可能需要为Case类型创建一个JsonConverter,因为您需要在序列化期间缓存Client对象的所有属性,直到有足够的信息来实际创建Client实例.

然后,您可以在JsonSerializer实例上公布的JsonConverterCollection实例上调用Add方法,该实例是用于执行序列化/反序列化的JsonSerializer实例.

请注意,如果您需要为可能以这种方式表示的许多不同的类执行此操作,那么可以编写一个JsonConverter实现,并将其扫描属性上的属性.如果该属性具有属性并且使用属性公开另一个对象,那么它将期望读/写点符号.

应该注意的是,当您使用点符号作为标识符时,很常见.如果可能的话,在构建JSON文字的一边,它应该这样做:

{ 
    CaseName: "John Doe v. State",CaseDate: "<some date>",Client: 
    {
        FirstName: "John",LastName: "Doe",Email: "johndoe@gmail.com"
    }
}

但这是假设你有这个目的的控制权.如果没有,那么你可以做的不多.

如果你有控制权,那么以这种方式构建你的JSON文字就不会需要一个自定义的JsonConverter实现.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读