2

是否可以使用 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 使用者尝试更改只读字段并想知道为什么它们对任何内容没有影响来减少混淆。

4

1 回答 1

2

只是总结一下。在 CodeDOM 中,除了原始字符串输出之外,没有办法做到这一点。

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

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

于 2009-07-15T18:51:28.347 回答