كيف يمكنني الحصول على مرجع إلى كائن الأصل عند deserializing XML في C #؟

StackOverflow https://stackoverflow.com/questions/600597

سؤال

وأنا لا يمكن أن يبدو للحصول على هذا العمل، وهنا هو رمز بلادي (تجريد لأسفل): -

[XmlRoot("report")]
public class Report
{
    [XmlArray("sections"), XmlArrayItem("section")]
    public List<Section> Sections;
}

public class Section
{
    public Report Report;
}

وأنا شيء مفقود؟

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

المحلول

والأشياء الخاصة بك تحتوي على مراجع دائرية التي غير معتمد من قبل في XmlSerializer الصف. هل يمكن بدلا من ذلك أن ننظر في DataContractSerializer حيث يدعم مثل هذه السيناريوهات.

نصائح أخرى

ويجب عليك التأكد من أنك تعرف كيف تريد هذه الفئات إلى تسلسل وإلغاء تسلسل. كتابة XML تريد نتيجة لذلك، ومعرفة كيف تريد الكائنات لتصبح XML والعكس بالعكس. انها ليست عدم التفكير.

وهنا حل بي. قد لا يكون أنيقة كما كنت تتوقع:

public class Report
{
  //...


  void PostLoad()
  {
    foreach(Section s in Sections)
    {
      s.Report = this;
    }
  }

  public static Report Load(string filename)
  {
    // Load using an XmlSerializer
    Report report = ...;

    report.PostLoad();

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