当前位置:  开发笔记 > Android > 正文

WCF DataContracts

如何解决《WCFDataContracts》经验,为你挑选了1个好方法。

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



1> Marc Gravell..:

只要将(非只读)字段标记为[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);
    }
}


如果你有一个简单的支持属性,这很好,但如果readonly属性类似于公共字符串FooBar {get {return Foo +''+ Bar; datacontract序列化器如何处理这种情况?
推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有