2010-03-31 15 views
7

der folgende Code spezifiziert einen Typ „MyBase64Binary“, die von einer Basisklasse „Testbase“XmlSerializer Konstruktor Fehler mit Klasse von einer Basisklasse abgeleitet

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

    } 
} 

abgeleitet ist, wenn ich versuche, eine XmlSerializer wie dieses

zu erstellen
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)); 
     } 
    } 
} 

von diesem dann bekomme ich eine InvalidOperationException Fehler:

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

Und die Inner Exception sagt mir folgendes:

Wenn ich nicht von der "TestBase" -Klasse ableiten, dann funktioniert alles gut.

Ich bekomme keine Lösung. Bitte helfen Sie.
Was ist los?

Grüße aus Deutschland
Jan

Antwort

4

Wenn Sie das XmlTextAttribute zu XmlAttribute oder XmlElement ändern, sollte es in Ordnung sein. Da Sie versuchten, das XmlTextAttribute zu verwenden, nahm es an, dass es sich um eine Zeichenfolge handeln würde. Wenn Sie ein aktuelles Byte-Array serialisieren möchten, versuchen Sie das XmlAttribute oder XmlElement

+1

+1, das Problem ist das Attribut, es hat nichts mit der Basisklasse zu tun. –

+2

Tanks! Scheint zu arbeiten! Aber warum funktioniert der Serializer, wenn er die Basisklasse auslässt und nicht ableitet? Sollte die Ausnahme nicht auch auftreten? –

+0

@Jan Erleben Sie das gleiche Problem. Wenn die Basisklasse weggelassen wird, funktioniert es. Irgendwie seltsames Verhalten ... – Sven

-1

Does [Serializable] auf Ihre Basisklasse Hilfe hinzufügen? Ich würde darauf achten, dass Ihre Basisklasse auch richtig dekoriert ist. Ich weiß nicht, ob das helfen wird oder nicht.

+1

Nein, hinzufügen [Serializable] wird nicht funktionieren. –

+3

'XmlSerializer' ** verwendet ** NICHT das' SerializableAttribute'. – Venemo

Verwandte Themen