我有一个序列化机制,可以在私有字段上工作,以确定应该序列化的内容和不应该序列化的内容。该方法背后的主要思想是仅序列化数据的“本质”。
示例:
public class Person {
private readonly string _firstName;
private readonly string _lastName;
public C1(string firstName, string lastName) {
_firstName = firstName;
_lastName = lastName;
}
public string FirstName { get { return _firstName; } }
public string LastName { get { return _lastName; } }
public string FullName { get { return _firstName + " " + _lastName; } }
}
序列化的示例对象将如下所示(JSON):
{ "firstName": "John", "lastName": "Doe" }
如您所见,基于字段的序列化可确保FullName
未序列化。
这种机制已经存在了一段时间并且完美无缺。但是,使用C#6.0中新的只读自动属性,这些字段的名称很尴尬,例如: <FirstName>k__BackingField
。
当然,我可以更新我的序列化代码以从支持字段中提取实际属性名称,并在序列化期间使用该名称。我想知道的是:这是一个强大的解决方案吗?或者生成的支持字段的命名是否会发生变化?
注意:这种方法的原因是模型类可以保持与序列化无关。我知道我也可以使用[JsonIgnore]属性来实现相同的功能,但我不想将这些属性添加到我的模型类中。
答案 0 :(得分:3)
听起来,您通过命名约定将支持字段与属性的关联基础化。如果你有一个私人字段_name
和一个属性Name
,那么字段必须成为该属性的支持字段。
这是一个强有力的解决方案吗?
不 - 一个强大的解决方案是为每种类型实现序列化,因为只有它知道哪些字段与哪个属性相关联。
或者生成的支持字段的命名是否会发生变化?
这是一个实现细节 - MS可以决定改变他们认为合适的命名约定。
答案 1 :(得分:0)
另一种方法,可能是使用ContractResolver,而不是与反映汽车属性相关的无聊事物进行斗争。
我将省略任何示例,因为我提供的链接有3个实用示例,可以引导您完成必需品。