C#6.0反射:提取只读自动属性的支持字段的名称
作者:互联网
我有一个序列化机制可以在专用字段上工作,以确定哪些应该序列化,哪些不应该序列化.该方法背后的主要思想是仅序列化数据的“本质”.
例:
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中的新的只读自动属性,这些字段的名称就比较笨拙,例如< First> k__BackingField.
当然,我可以更新序列化代码以从支持字段中提取实际的属性名称,并在序列化过程中使用该名称.我想知道的是:这是一个可靠的解决方案吗?还是所生成的后备字段的名称可能会发生变化?
注意:这种方法的原因是模型类可以保持与序列化无关.我知道我也可以使用[JsonIgnore]属性来实现相同的功能,但是我不想将此类属性添加到我的模型类中.
解决方法:
听起来您好像是通过命名约定来将背景字段与属性相关联.注意如果您有一个私有字段_name和一个属性Name,那么该字段必须是该属性的后备字段.
Is this a robust solution?
否-一种健壮的解决方案是为每种类型实现序列化,因为只有它可以确定哪些字段与哪个属性相关联.
Or is the naming of the generated backing fields subject to change?
这是一个实现细节-MS可以决定更改命名约定,但是他们认为合适.
标签:reflection,serialization,c-6-0,c 来源: https://codeday.me/bug/20191119/2037227.html