我有一个内部客户端托管的WCF服务-我们可以控制所有的客户端。因此,我们将使用数据合同库来消除对代理生成的需求。我想使用一些只读属性,并使用一些没有默认构造函数的数据契约。谢谢你的帮助。
发布于 2008-10-05 21:31:17
只要将(非只读)字段标记为DataMember,而不是属性,只读属性就可以。与XmlSerializer不同,IIRC DataContractSerializer不使用默认的ctor -它使用单独的反射机制来创建未初始化的实例。除了在mono的"Olive“(WCF port)上,它确实使用了默认的ctor (目前或最近的某个时候)。
示例:
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);
}
}https://stackoverflow.com/questions/172681
复制相似问题