десериализация обобщенного класса с использованием List <T> - PullRequest
2 голосов
/ 24 октября 2011

У меня проблема с общим классом, который я десериализирую с помощью XMLSerialiser.Вот код

[XmlInclude(typeof(OrderProposalsProductGroupData<OrderProposalsProductGroupProposals>))]
public class OrderProposalsStoreProductGroups<TU> : OrderProposalsStore<TU> where TU : class
{

    #region properties

    /// <summary>
    /// TODO
    /// </summary>
    [XmlElement("groups")]
    /* BUG: This list is not fully filled during deserialisation. Only one entry is added although the stream does definetly have more entries. Why the hell? It works with all other classes in our logic but not here.
     * Maybe the deserializer has problems with the generic nature? but I couldn't find any such issue reported anywhere in the internet or any
     restriction description concerning generics (in fact I found a bunch of examples using generics with the Deserialiser). Actually the MS XMLSerializer description confirms
     that any class implementing an IEnumerable or ICollection can be deserialized so it makes no sense it doesn't work. Anybody a clue? */
    public List<TU> ProductGroups { get; set; }

    #endregion

}

Кто-нибудь сталкивался с подобным поведением?Самое смешное, что объект (который добавлен в приведенный выше список) правильно заполнен соответствующими данными из потока XML, который мы обрабатываем.

Может быть, стоит показать класс, реализующий вышеупомянутый класс,который сам по себе также является родовым классом

public class OrderProposalsStores<T> : EntityBase where T : new()
{

    #region properties

    [XmlElement("Store")]
    public T OrderProposalsStore
    {
        get; 
        set;
    }

    #endregion
}

И для полноты здесь класс в списке

[Serializable,
XmlInclude(typeof(OrderProposalsProductGroupProposals))]
public class OrderProposalsProductGroupData<TU> : EntityBase where TU : OrderProposalsProductGroup
{
    #region properties

    [XmlElement("productgroup")]
    public TU ProductGroup { get; set; }

    #endregion

}

Я хорошо знаю XMLArray и XMLArrayItem, но это структура, которая былаиспользуется в коде, и он работает как шарм во всем другом коде, который мы используем, поэтому мы должны оставаться последовательными (ну, а крайний срок приближается, так голый со мной ...).В любом случае, я считаю, что это должно работать в любом случае, и я не знаю, почему это не так.

Я ценю ЛЮБОЙ вклад или помощь.

Заранее спасибо

1 Ответ

1 голос
/ 24 октября 2011

Попробуйте вместо этого использовать атрибут XmlArray:

[XmlArray("List")]
public List<T> MyList { get; set; }
...