我有一个为内部客户端托管的WCF服务 - 我们可以控制所有客户端.因此,我们将使用数据协定库来否定代理生成的需要.我想使用一些readonly属性,并有一些没有默认构造函数的datacontracts.谢谢你的帮助...
只要将(非只读)字段标记为[DataMember]而不是属性,只读属性就可以了.与XmlSerializer不同,IIRC DataContractSerializer不使用默认的ctor - 它使用单独的反射机制来创建未初始化的实例.除了对单的" 橄榄 "(WCF端口),它不使用默认的构造函数(在那一刻,或在最近的一些点).
例:
using System; using System.IO; using System.Runtime.Serialization; [DataContract] class Foo { [DataMember(Name="Bar")] private string bar; public string Bar { get { return bar; } } public Foo(string bar) { this.bar = bar; } } static class Program { static void Main() { DataContractSerializer dcs = new DataContractSerializer(typeof(Foo)); MemoryStream ms = new MemoryStream(); Foo orig = new Foo("abc"); dcs.WriteObject(ms, orig); ms.Position = 0; Foo clone = (Foo)dcs.ReadObject(ms); Console.WriteLine(clone.Bar); } }