سؤال

لقد قمت فقط بالتحديث إلى إصدار R275 ولا يبدو أنه يدير فئات DataContract بشكل صحيح عن طريق تسلسل هذه الفئة البسيطة للغاية:

[DataContract]
public class ProtoData
{
    [DataMember(Order = 1)]
    private long _id;
    [DataMember(Order = 2)]
    private string _firstName;
    [DataMember(Order = 3)]
    private string _lastName;

    public long Id
    {
        get { return _id; }
        set { _id = value; }
    }

    public string FirstName
    {
        get { return _firstName; }
        set { _firstName = value; }
    }

    public string LastName
    {
        get { return _lastName; }
        set { _lastName = value; }
    }

    public ProtoData(long id, string firstName, string lastName)
    {
        _id = id;
        _firstName = firstName;
        _lastName = lastName;
    }

    public ProtoData()
    {
    }

أحصل على فئات التعاقد فقط (والقوائم/المصفوفات من هذا) يمكن معالجتها (Protodata معالجة الأخطاء)

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

المحلول

حقًا؟ هذا هو .... غريب. كنت أتوقع أن تختبئ الوحدة من هذا التغيير. هل أنت متأكد من أنك تستخدم الإصدار الصحيح؟ هناك نسخة 2.0 (التي لا تضمن [DataContract] الدعم ، لأن هذا في WCF ، تمديد 3.0) وإصدار 3.0 منفصل. تريد إصدار 3.0 (NET30.zip).

تم اختباره بنجاح مع R275/Net30:

static void Main() {
    ProtoData pd = new ProtoData {
        FirstName = "Marc",
        LastName = "Gravell",
        Id = 23354
    }, clone;
    using (MemoryStream ms = new MemoryStream()) {
        Serializer.Serialize(ms, pd);
        Console.WriteLine(ms.Length);
        ms.Position = 0;
        clone = Serializer.Deserialize<ProtoData>(ms);            
    }
    Console.WriteLine(clone.FirstName);
    Console.WriteLine(clone.LastName);
    Console.WriteLine(clone.Id);
}

مع الإخراج:

19
Marc
Gravell
23354

نصائح أخرى

حاول القيام بما يلي:

  • قم بإزالة جميع الأعضاء الخاصين
  • استخدام الخصائص العامة

    السلسلة العامة LastName ؛

  • حدد جميع العقارات العامة مع [Datamember

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top