C#6.0反射:提取只读自动属性的支持字段的名称
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#6.0反射:提取只读自动属性的支持字段的名称,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1429字,纯文字阅读大概需要3分钟。
内容图文
![C#6.0反射:提取只读自动属性的支持字段的名称](/upload/InfoBanner/zyjiaocheng/663/8c117496dac841fea41d27fee03038ca.jpg)
我有一个序列化机制可以在专用字段上工作,以确定哪些应该序列化,哪些不应该序列化.该方法背后的主要思想是仅序列化数据的“本质”.
例:
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可以决定更改命名约定,但是他们认为合适.
内容总结
以上是互联网集市为您收集整理的C#6.0反射:提取只读自动属性的支持字段的名称全部内容,希望文章能够帮你解决C#6.0反射:提取只读自动属性的支持字段的名称所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。