我有一个扁平的
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类型的一个属性.
是的你可以.您将从
原文链接:https://www.f2er.com/json/288454.htmlJsonConverter
导出一个类,并将
CanConvert
方法替换为可以转换客户端类型的标记.
然后,您将覆盖ReadJson
和WriteJson
方法来读取和写入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" } }
但这是假设你有这个目的的控制权.如果没有,那么你可以做的不多.