문제

내부 클라이언트를 위해 호스팅 된 WCF 서비스가 있습니다. 우리는 모든 클라이언트를 제어하고 있습니다. 따라서 우리는 프록시 생성의 필요성을 부정하기 위해 데이터 계약 라이브러리를 사용합니다. 기본 속성을 사용하고 기본 생성자가없는 데이터 계약을 사용하고 싶습니다. 당신의 도움을 주셔서 감사합니다...

도움이 되었습니까?

해결책

Readonly 속성은 속성이 아닌 (읽지 않는) 필드를 [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