【问题标题】:Public getter, protected setter with CodeDOM使用 CodeDOM 的公共 getter、受保护的 setter
【发布时间】:2009-06-18 22:42:08
【问题描述】:

是否可以使用 CodeDOM 生成具有公共 getter 和受保护 setter 的属性?目标是实现类似于以下的目标。

[Serializable]
public class Wrapper {
  public Wrapper() { }
  private string _Field;
  public string Field { get; protected set; }
}

我有一个基于 COM 的大型 API,我希望为其编译一个 .Net 包装器,以便更轻松地使用 .Net 功能,例如 LINQ、反射、继承和序列化。唯一可行的方法是通过代码生成自动化大部分工作。

这些对象包含一些我希望通过需要属性设置器的序列化公开的只读属性。但是这么长时间我还没有找到任何方法来设置 setter protected 或类似的。

一种方法可能是将属性标记为不可序列化并序列化 _Field 但由于序列化输出的一个目标是 web 我需要使用所有 可能 序列化程序属性来赋予私有成员指示序列化程序使用更简洁的名称(不带下划线)进行序列化。出于同样的原因,我认为自定义序列化是不可能的。

我可以准确地反序列化它并不重要,即。在反序列化期间/通过反序列化过程中,值保持其原始值并不重要。只读属性只是为了通过防止 API 使用者尝试更改只读字段并想知道为什么它们对任何内容没有影响来减少混淆。

【问题讨论】:

  • 嗯。 XmlSerializer 和 JSON.Net JsonSerializer 都能够序列化它。我一定记错了,序列化程序确保它们在开始序列化时能够反序列化。所以最初的问题从未存在,但我仍然想知道是否可以使用 CodeDOM 创建受保护的 getter。

标签: c# .net serialization codedom


【解决方案1】:

刚刚结束。没有办法在 CodeDOM 中保存原始字符串输出。

对于 XMLSerializer 而言,序列化器能够序列化类,但不会使用受保护的 setter 序列化值。

所以不可能。我使用的另一种方法是为这些类中的每一个生成一个ToSerializableType() 方法,该方法返回一个具有所有读/写属性的类似类的实例。

【讨论】:

    猜你喜欢
    • 2013-07-08
    • 2018-03-17
    • 2011-01-17
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多