内部クライアント用にホストされている WCF サービスがあります。すべてのクライアントを制御できます。したがって、データ コントラクト ライブラリを使用して、プロキシ生成の必要性をなくします。いくつかの読み取り専用プロパティを使用し、デフォルト コンストラクターのないデータ コントラクトを使用したいと考えています。ご協力いただきありがとうございます...
9113 次
1 に答える
25
プロパティではなく [DataMember] として (非読み取り専用) フィールドをマークする限り、読み取り専用プロパティは問題ありません。XmlSerializer とは異なり、IIRC DataContractSerializer は既定の ctor を使用しません。別のリフレクション メカニズムを使用して、初期化されていないインスタンスを作成します。mono の " 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);
}
}
于 2008-10-05T21:31:16.583 に答える