7

次のコードは、基本クラス「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()
        {
        }

    }
}

このような 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」クラスから派生していない場合、すべて正常に動作します。

解決策がわかりません。助けてください。
どうしたの?

ドイツからのご
挨拶

4

2 に答える 2

4

XmlTextAttribute を XmlAttribute または XmlElement に変更しても問題ありません。XmlTextAttribute を使用しようとしていたため、何らかの文字列であると想定されていました。実際のバイト配列をシリアル化する場合は、XmlAttribute または XmlElement を試してください。

于 2010-03-31T11:36:47.217 に答える
-1

[Serializable]基本クラスへの追加は役に立ちますか? 基本クラスも適切に装飾されていることを確認します。ただし、これが役立つかどうかはわかりません。

于 2010-03-31T11:33:09.073 に答える