質問

内部クライアント用にホストされているWCFサービスがあります。すべてのクライアントを管理しています。したがって、プロキシ生成の必要性を無効にするために、データコントラクトライブラリを使用します。いくつかの読み取り専用プロパティを使用し、デフォルトのコンストラクタなしでいくつかのデータコントラクトを使用したいと思います。 ご協力ありがとうございます...

役に立ちましたか?

解決

読み取り専用プロパティは、(非読み取り専用)フィールドをプロパティではなく[DataMember]としてマークする限り問題ありません。 XmlSerializerとは異なり、IIRC DataContractSerializerはデフォルトのctorを使用しません-個別のリフレクションメカニズムを使用して、初期化されていないインスタンスを作成します。モノの" オリーブ"を除く(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);
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top