سؤال

ولدي خدمة WCF استضافتها للعملاء الداخليين - لدينا السيطرة على جميع العملاء. سنقوم بالتالي باستخدام مكتبة عقود بيانات ينفي الحاجة إلى إنشاء وكيل. وأود أن استخدام بعض الخصائص للقراءة فقط وبعض datacontracts دون المنشئات الافتراضية. شكرا لمساعدتكم ...

هل كانت مفيدة؟

المحلول

وخصائص للقراءة فقط على ما يرام طالما وضع علامة (غير للقراءة فقط) الحقل ك [DataMember]، وليس الملكية. على عكس XmlSerializer، IIRC DataContractSerializer لا يستخدم المنشئ الافتراضي - أنه يستخدم آلية التفكير منفصلة لإنشاء مثيلات غير مهيأ. ما عدا يوم أحادية في " الزيتون " (منفذ 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);
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top