Как сериализовать два объекта с отношением «один ко многим»? - PullRequest
1 голос
/ 12 августа 2010

У меня есть два класса: Lookup и LookupItem, у которых Lookup есть член с именем Items, который является коллекцией LookupItem s. Я не могу сериализовать Lookup или LookupItem. С первым я получаю ошибку The type LookupItem was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically., а со вторым я получаю ошибку A circular reference was detected while serializing an object of type Lookup..

Как я могу решить эту проблему?

Я использую следующий код для сериализации:

public static string Serialize(object obj)
{
    XmlSerializer ser = new XmlSerializer(obj.GetType());
    StringBuilder sb = new StringBuilder();
    StringWriter writer = new StringWriter(sb);
    ser.Serialize(writer, obj);
    return sb.ToString();
}

UPDATE: скелет классов:

[ActiveRecord (Lazy = true)] Открытый класс Lookup: ActiveRecordExtender, IComparable { public Lookup () { } * * Тысяча двадцать-один

[Property]
public virtual string Title { set; get; } 

// creating relation
[HasMany(typeof(LookupItem), Cascade = ManyRelationCascadeEnum.All)]
public virtual IList Items { set; get; }

}

[ActiveRecord (Lazy = true)] открытый класс LookupItem: ActiveRecordExtender { public LookupItem () { }

//creating relation
[BelongsTo("Lookup_ID")]
public virtual Lookup ContainerLookup { set; get; }

[Property]
public virtual string Title { set; get; } 

[Property]
public virtual string Value { set; get; } 

[Property]
public virtual int SortOrder { set; get; }

}

Обратите внимание, что я использую Catle ActiveRecord в качестве ORM, и обратите внимание, что эта проблема не связана с наследованием от ActiveRecordBase. Потому что другие классы в этой области, которые не имеют отношений, работают должным образом.

Ответы [ 2 ]

1 голос
/ 12 августа 2010

Полагаю, вы хотите сериализовать вложенные классы.

Посмотрите на аналогичный пост C # System.Xml.Serialization Самостоятельные вложенные элементы

http://www.codeproject.com/KB/XML/Serializing_Nested_XML.aspx

0 голосов
/ 14 августа 2010

Согласно сообщению в блоге и его комментариям здесь и, если предполагается, что нет необходимости в связанных данных, добавление [XmlIgnore] решает проблему.

...