.net - WCF 数据契约(Contract)

标签 .net wcf datacontract serialization

我有一个为内部客户端托管的 WCF 服务——我们可以控制所有客户端。因此,我们将使用数据合约库来消除对代理生成的需求。我想使用一些只读属性并有一些没有默认构造函数的数据契约(Contract)。
谢谢你的帮助...

最佳答案

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

关于.net - WCF 数据契约(Contract),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/172681/

相关文章:

c# - 为什么 PasswordBox 在 Silverlight 中被密封?

asp.net - 嵌入式非托管 DLL 无法在 ASP.NET 中加载

c# - InvalidDataContractException ("Type cannot be serialized") 使用 WCF DataContract 时出错

asp.net - 在使用 Asp.net Web API 时使用 DataContract 和 DataMember 属性有什么好处吗?

c# - 类如何从自身的参数化版本继承?

c# - .Net & C# : Trying to have a transparent image on a button (assigned from IDE)

.net - Web应用程序架构问题

c# - 通过 ProxyServer 发送 WCF 请求

c# - 遵循 EnumMemberAnnotation 的 Enum.ToString()

c# - System.Net.WebSockets 乒乓/乒乓