2009-06-18 88 views
2

是否有可能通过CodeDOM生成一个公共getter和受保护setter的属性?目标是实现类似于以下内容的内容。公共getter,带CodeDOM的受保护setter

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

我有,我想编一个.NET包装所以它会更容易使用.NET功能,如LINQ,反思,继承和系列化与它的大型COM基于API。唯一可行的方法是通过代码生成自动化大部分工作。

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

一种方式是,以纪念财产不能序列化和序列化_Field但由于针对序列输出一个目标是网络我需要的属性私有成员与直接串行所有可能串行属性使用更清晰的名称(不带下划线)进行序列化。出于同样的原因,我相信自定义序列化是不可能的。

准确反序列化并不重要,即。在反序列化过程中价值仍然保持其原始价值并不重要。这些属性只是为了减少混淆,防止API消费者尝试更改只读字段并想知道为什么它们对任何内容都没有影响。

+0

嗯。 XmlSerializer和JSON.Net JsonSerializer都可以序列化它。我一定记得错误的是序列化程序确保它们能够在序列化时反序列化。所以最初的问题从来没有,但我仍然想听听CodeDOM是否可以创建受保护的getter。 – 2009-06-19 00:20:46

回答

1

只是把它包起来。在CodeDOM保存原始字符串输出没有办法做到这一点。

什么来到XMLSerializer序列化器能够序列化类,但它不会序列化值与受保护的setter。

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