使用CodeDOM的公共getter,受保护的setter

时间:2009-06-18 22:42:09

标签: c# .net serialization codedom

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

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

我有一个基于COM的大型API,我希望编译一个.Net包装器,这样就可以更容易地使用.Net功能,如LINQ,Reflection,继承和序列化。唯一可行的方法是通过代码生成自动完成这项工作的大部分工作。

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

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

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

1 个答案:

答案 0 :(得分:1)

把它包起来。在原始字符串输出中,无法在CodeDOM中执行此操作。

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

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