سؤال

ولقد حصلت على هذه الفئة التي توفرها خدمة الإنترنت التي وثم يتم استهلاكه من قبل التطبيق سيلفرلايت (أنا لا أعرف إذا كان هذا هو ذات الصلة أو لا)

[Serializable]
public class Entry
{
    private string _title;

    public string Id { get; set; }
    public string Title { get { return _title; } set { _title = value; } }
    public string Link { get; set; }
    public DateTime Published { get; set; }
    public DateTime Updated { get; set; }
    public User User { get; set; }
    public Service Service { get; set; }
    public List<Comment> Comments { get; set; }
    public List<Like> Likes { get; set; }
    public List<Media> Media { get; set; }
}

والمتغير _title أضفت لإثبات ما يحدث خطأ. عندما الرجوع إلى خدمة ويب في بلدي التطبيق سيلفرلايت، فإنه يولد XSD معلمات أكثر:

  <xs:complexType name="Entry">
    <xs:sequence>
      <xs:element name="_title" nillable="true" type="xs:string" />
      <xs:element name="_x003C_Comments_x003E_k__BackingField" nillable="true" type="tns:ArrayOfComment" />
      <xs:element name="_x003C_Id_x003E_k__BackingField" nillable="true" type="xs:string" />
      <xs:element name="_x003C_Likes_x003E_k__BackingField" nillable="true" type="tns:ArrayOfLike" />
      <xs:element name="_x003C_Link_x003E_k__BackingField" nillable="true" type="xs:string" />
      <xs:element name="_x003C_Media_x003E_k__BackingField" nillable="true" type="tns:ArrayOfMedia" />
      <xs:element name="_x003C_Published_x003E_k__BackingField" type="xs:dateTime" />
      <xs:element name="_x003C_Service_x003E_k__BackingField" nillable="true" type="tns:Service" />
      <xs:element name="_x003C_Updated_x003E_k__BackingField" type="xs:dateTime" />
      <xs:element name="_x003C_User_x003E_k__BackingField" nillable="true" type="tns:User" />
    </xs:sequence>
  </xs:complexType>

ملحوظة فقط خاصية العنوان هو مجرد اسمه، واسمه الآخرين <Link>_BackingField الذي يموت تماما عند محاولة تحميل عنصر لأنك لا يمكن أن يكون <أو> في اسم خاصية.

وماذا هو تسلسل مجالات الدعم وليس الممتلكات العامة؟

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

المحلول

وكما هو موضح في هذه المقالة ، عند استخدام DataContractSerializer (في مسلسل الافتراضي لWCF) في تركيبة مع السمة Serializable، والسلوك هو أن كافة المجالات العامة والخاصة، وتسلسل. لأن الحقول دعم هي في قضيتك إنشاؤه تلقائيا، المترجم يأتي مع أسماء مضحك أن يكون لديك أي فرصة لليتعارض مع أسماء الحقول يمكنك إنشاء (C # قد لا تقبل "<" أو ">" في التعريف، ولكن CLR ليس من الصعب إرضاءه جدا).

وربما كان أسهل طريقة لتصحيح هذا الوضع لإضافة DataContract وDataMember سمات إلى فئة Entry حسب الاقتضاء.

نصائح أخرى

لا تستخدم خصائص التلقائي. بدلا من الكتابة:

public string Id { get; set; }

والكتابة:

string id;
public string Id { get { return id;} set {id = value;} }

في حالة من خصائص تلقائي مجال دعم فقط يحصل على تسلسل وهذا هو السبب في أن تحصل أسماء غريبة.

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