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

我有一个扁平的 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实现.

相关文章

AJAX是一种基于JavaScript和XML的技术,能够使网页实现异步交...
在网页开发中,我们常常需要通过Ajax从后端获取数据并在页面...
在前端开发中,经常需要循环JSON对象数组进行数据操作。使用...
AJAX(Asynchronous JavaScript and XML)是一种用于创建 We...
AJAX技术被广泛应用于现代Web开发,它可以在无需重新加载页面...
Ajax是一种通过JavaScript和HTTP请求交互的技术,可以实现无...