XmlSerializer构造函数错误,类派生自基类

时间:2010-03-31 11:18:36

标签: c# .net xml serialization xmlserializer

以下代码指定了一个类型“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”类派生,那么一切正常。

我没有得到解决方案。请帮忙。
怎么了?

来自德国的问候 扬

2 个答案:

答案 0 :(得分:4)

如果将XmlTextAttribute更改为XmlAttribute或XmlElement,则应该没问题。由于您尝试使用XmlTextAttribute,因此它假定它将是某种字符串。如果要将实际的字节数组序列化,请尝试使用XmlAttribute或XmlElement

答案 1 :(得分:-1)

向基类添加[Serializable]是否有帮助?我会考虑确保您的基类也正确装饰。不过,我不知道这是否有帮助。