Двойное Преобразование в последовательную форму Списка <T>, где T осуществляет ISerializable

У меня есть класс X, который осуществляет ISerializable

#region ISerializable Members

    /// 
/// Sets up for deserialization ///
 
    /// 
    /// 
    private X(SerializationInfo info, StreamingContext context)
    {
        this.Key = info.GetString("Key");
        this.Title = info.GetString("Title");
        this.Count = info.GetInt32("Count");

        originalDataSource = new ObservableDataSource((IDataType[])info.GetValue("DataSource", typeof(IDataType[])));

        this.A = (Color)ColorConverter.ConvertFromString(info.GetString("A"));
        this.B = Utilities.GetDashStyleFromString(info.GetString("B"));
        this.C = info.GetDouble("C");
        this.D = (Color)ColorConverter.ConvertFromString(info.GetString("D"));
        this.E = (Shape)Enum.Parse(typeof(Shape), info.GetString("E"));
        this.F = info.GetInt32("F");
        this.G = info.GetInt32("G");
        this.H = info.GetInt32("H");
        this.I = info.GetBoolean("I");
    }

    /// 
/// Sets up for serialization ///
 
    /// 
    /// 
    [SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)]
    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        info.AddValue("Key", this.Key);
        info.AddValue("Title", this.Title);
        info.AddValue("Count", this.Count);

        info.AddValue("DataSource", this.originalDataSource.Collection.ToArray());

        info.AddValue("A", this.A.ToString());
        info.AddValue("B", this.B.ToString());
        info.AddValue("C", this.C);
        info.AddValue("D", this.D.ToString());
        info.AddValue("E", this.E);
        info.AddValue("F", this.F);

        info.AddValue("G", this.G);
        info.AddValue("H", this.H);
        info.AddValue("I", this.I);
    }

    #endregion

У меня есть класс Y, который содержит Список и eventaggregator.

#region ISerializable Members

    /// 
/// Sets up for deserialization ///
 
    /// 
    /// 
    private Y(SerializationInfo info, StreamingContext context)
    {
        List Coll = (List)info.GetValue("DataSource", typeof(List));

        if (_Collection == null)
            _Collection = new List();

        foreach (X x in Coll)
            _Collection.Add(x);

        Count = info.GetInt32("Count");
    }

    /// 
/// Sets up for serialization ///
 
    /// 
    /// 
    [SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)]
    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        info.AddValue("DataSource", _Collection);
        info.AddValue("Count", this.Count);
    }

    #endregion

Я должен преобразовать в последовательную форму Y в наборе из двух предметов.

Но когда я десериализовываю Y и проверяю следующую линию, он возвращает Список с пустыми указателями вместо X объектов, которые, как предполагалось, были преобразованы в последовательную форму.

List Coll = (List)info.GetValue("DataSource", typeof(List));

Какая-либо идея что не так с этой частью кода? Я неспособен просто преобразовать в последовательную форму с условным преобразованием в последовательную форму, Цвет не становится преобразованным в последовательную форму и также, у ObservableDataSource нет сериализуемого признака, и я не могу изменить его.

Это находится в.NET структуре 3.5 (если это имеет какое-либо применение).

1
nl ja de

1 ответы

Цветной класс не сериализуемый, необходимо будет осуществить собственный формат сериализации для него (я обычно, преобразуйте в последовательную форму код ARGB вместо этого).

Кроме от этого, BinarySerializer поддерживает преобразование в последовательную форму коллекции, таким образом, вы не должны на самом деле осуществлять свою собственную функцию преобразования в последовательную форму.

1
добавлено
вы - желанная, удача со своим проектом!
добавлено автор Samy Arous, источник
Я выяснил решение, которое произошло из вашего. Спасибо!:)
добавлено автор Harsha, источник
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot