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

Jan*_*yll 7 .net c# xml serialization xmlserializer

以下代码指定从基类"TestBase"派生的类型"MyBase64Binary"

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()
        {
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试创建这样的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));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

从这一个然后我得到一个InvalidOperationException错误:

{"There was an error reflecting type 'Test.MyBase64Binary'."}
Run Code Online (Sandbox Code Playgroud)

内部例外告诉我以下内容:

{"Cannot serialize object of type 'Test.MyBase64Binary'. Consider changing type of XmlText member 'Test.MyBase64Binary.__Value' from System.Byte[] to string or string array."}
Run Code Online (Sandbox Code Playgroud)

如果我不是从"TestBase"类派生的,那么一切正常.

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

来自德国的问候
Jan

SwD*_*n81 4

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

  • 坦克!似乎有效!但是,如果省略基类并且不派生,为什么序列化器可以工作呢?异常不应该也发生吗? (2认同)