Ошибка конструктора XmlSerializer с классом, производным от базового класса - PullRequest
7 голосов
/ 31 марта 2010

следующий код указывает тип «MyBase64Binary», который является производным от базового класса «TestBase»

using System;
using System.Xml.Serialization;
using System.Collections;
using System.Xml.Schema;
using System.ComponentModel;

namespace Test
{
    public class TestBase
    {
        public TestBase()
        {
        }
    }

    [XmlType(TypeName = "base64Binary"), Serializable]
    public partial class MyBase64Binary : TestBase
    {
        [System.Xml.Serialization.XmlTextAttribute(DataType = "base64Binary")]
        [EditorBrowsable(EditorBrowsableState.Advanced)]
        public Byte[] __Value;

        [XmlIgnore]
        public Byte[] Value
        { 
            get { return __Value; }
            set { __Value = value; }
        }

        public MyBase64Binary()
        {
        }

    }
}

Если я попытаюсь создать XmlSerializer, как это

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;

namespace Test1
{
    class Program
    {
        static void Main(string[] args)
        {
            XmlSerializer s = new XmlSerializer(typeof(Test.MyBase64Binary));
        }
    }
}

из этого я получаю ошибку InvalidOperationException:

{"There was an error reflecting type 'Test.MyBase64Binary'."}

И Внутреннее Исключение говорит мне следующее:

{"Cannot serialize object of type 'Test.MyBase64Binary'. Consider changing type of XmlText member 'Test.MyBase64Binary.__Value' from System.Byte[] to string or string array."}

Если я не являюсь производным от класса "TestBase", то все работает нормально.

Я не понимаю решение. Пожалуйста, помогите.
В чем дело?

Привет из Германии
Jan

Ответы [ 2 ]

4 голосов
/ 31 марта 2010

Если вы измените XmlTextAttribute на XmlAttribute или XmlElement, все должно быть в порядке. Поскольку вы пытались использовать XmlTextAttribute, предполагалось, что это будет какая-то строка. Если вы хотите сериализовать фактический байтовый массив, попробуйте XmlAttribute или XmlElement

0 голосов
/ 31 марта 2010

Помогает ли добавление [Serializable] в ваш базовый класс? Я хотел бы убедиться, что ваш базовый класс также правильно оформлен. Я не знаю, поможет это или нет.

...