Dan*_* T. 10 syntax serialization json.net
我有一个扁平的JSON:
{
"CaseName" : "John Doe v. State",
"CaseDate" : "<some date>",
"Client.FirstName" : "John",
"Client.LastName" : "Doe",
"Client.Email" : "johndoe@gmail.com"
etc...
}
Run Code Online (Sandbox Code Playgroud)
我想将它反序列化回这个实体:
public class Case()
{
public string CaseName { get; set; }
public string CaseDate { get; set; }
public Client Client { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
where Client.FirstName,Client.LastName和Client.Email是Client对象中的属性.使用Json.NET,有没有办法让它解析点符号并正确反序列化这个实体?目前,使用默认设置,它告诉我这Client.FirstName不是类型中的属性Case.
是的你可以.您将从中派生一个类JsonConverter并覆盖该CanConvert方法以指示您可以转换该Client类型.
然后,您将覆盖ReadJson和WriteJson方法以读取和写入JSON文字的字段.
对于像这样的JSON文字,您很可能需要JsonConverter为该Case类型创建一个,因为Client在序列化期间需要缓存对象的所有属性,直到您有足够的信息来实际创建Client实例.
然后,您将Add在用于执行序列化/反序列化的实例上的属性JsonConverterCollection公开的实例上调用该方法.ConvertersJsonSerializer
请注意,如果您需要为可能以这种方式表示的许多不同类执行此操作,那么您可以编写一个 JsonConverter实现,并让它扫描属性上的属性.如果属性具有该属性并使用属性公开另一个对象,则它将期望读/写点符号.
应该注意的是,当您使用点符号作为标识符时,这种情况非常罕见.如果可能的话,在构建JSON文字的那一边,它应该以这种方式执行:
{
CaseName: "John Doe v. State",
CaseDate: "<some date>",
Client:
{
FirstName: "John",
LastName: "Doe",
Email: "johndoe@gmail.com"
}
}
Run Code Online (Sandbox Code Playgroud)
但这是假设你有控制权.如果你不这样做,那么你就无能为力了.
如果你有控制权,那么以这种方式构建你的JSON文字将无需自定义JsonConverter实现.
| 归档时间: |
|
| 查看次数: |
2742 次 |
| 最近记录: |