2010-03-31 22 views
7

il seguente codice specifica un tipo "MyBase64Binary" che è derivato da una classe di base "TestBase"errore costruttore XmlSerializer con classe derivata da una classe di base

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

    } 
} 

Se provo a creare un XmlSerializer simili

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

da questo allora ottengo un errore InvalidOperationException:

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

E l'eccezione interna mi dice seguente:

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

Se non derivano dalla classe "TestBase" allora tutto funziona benissimo.

Non ho la soluzione. Per favore aiuto.
Cosa c'è che non va?

Saluti dalla Germania
gen

risposta

4

Se si modifica XmlTextAttribute in XmlAttribute o XmlElement, dovrebbe essere ok. Dato che stavi cercando di usare XmlTextAttribute, si supponeva che sarebbe stato una specie di stringa. Se si desidera serializzare un array di byte effettivo, provare XmlAttribute o XmlElement

+1

+1, il problema è l'attributo, non ha nulla a che fare con la classe base. –

+2

Serbatoi! Sembra funzionare! Ma perché il serializzatore funziona se si omette la classe base e non si ottiene? L'eccezione non si verifica anche? –

+0

@Jan Sperimentare lo stesso problema. Se la classe base è omessa, funziona. In qualche modo strano comportamento ... – Sven

-1

Fa aggiungendo [Serializable] al vostro aiuto classe di base? Cercherò di assicurarmi che anche la tua classe base sia adeguatamente decorata. Non so se questo aiuterà o no, però.

+1

No, l'aggiunta di [Serializable] non funzionerà. –

+3

'XmlSerializer' ** NON ** usa il' SerializableAttribute'. – Venemo

Problemi correlati