WCF DataContracts

时间:2008-10-05 21:20:17

标签: .net wcf datacontract serializer

我为内部客户端托管了一个WCF服务 - 我们可以控制所有客户端。因此,我们将使用数据协定库来否定代理生成的需要。我想使用一些readonly属性,并有一些没有默认构造函数的datacontracts。 谢谢你的帮助...

1 个答案:

答案 0 :(得分:24)

只要将(非只读)字段标记为[DataMember]而不是属性,只读属性就可以了。与XmlSerializer不同,IIRC DataContractSerializer不使用默认的ctor - 它使用单独的反射机制来创建未初始化的实例。除了单声道的“Olive”(WCF端口), 使用默认的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);
    }
}