C# 公共getter,使用CodeDOM保护setter

C# 公共getter,使用CodeDOM保护setter,c#,.net,serialization,codedom,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、反射、继承

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

[Serializable]
public class Wrapper {
  public Wrapper() { }
  private string _Field;
  public string Field { get; protected set; }
}
我有一个大型的基于COM的API,我希望为它编译一个.Net包装器,以便更容易地使用.Net特性,如LINQ、反射、继承和序列化。唯一可行的方法是通过代码生成自动化大部分工作

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

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


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

到此结束。在CodeDOM save中,无法为原始字符串输出执行此操作

至于XMLSerializer,序列化程序能够序列化类,但不会使用受保护的setter序列化值


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

Hm.XmlSerializer和JSON.Net JsonSerializer都能够对其进行序列化。我一定记错了,序列化程序确保在开始序列化时能够反序列化。因此,最初的问题从来没有出现过,但我仍然想知道使用CodeDOM是否可以创建受保护的getter。