2010-04-07 2 views
8

voglio serializzare una classe per XML e memorizzare che in un campo in un database. Posso serializzare con questo:Serializzare una classe C# in xml. Conservare il XML come una stringa in SQL Server e quindi ripristinare la classe successiva

StringWriter sw = new StringWriter(); 
XmlSerializer xmlser = new XmlSerializer(typeof(MyClass)); 

xmlser.Serialize(sw, myClassVariable); 
string s = sw.ToString(); 
sw.Close(); 

funziona Questo è, ma ha gli spazi dei nomi in essa.

<.... xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 

Questi rallenteranno la deserializzazione perché andrà a quelli e verificherà l'XML? Mi sono liberato dei namespace creando un XmlSerializerNamespaces vuoti e utilizzando tale per serializzare, ma poi il xml aveva ancora gli spazi dei nomi in giro variabili intere:

<anyType xmlns:q1="http://www.w3.org/2001/XMLSchema" 
     d3p1:type="q1:int" 
     xmlns:d3p1="http://www.w3.org/2001/XMLSchema-instance"> 
    3 
</anyType> 

La mia domanda è: è necessario avere la namesapces per deserializzazione e se no, come sbarazzarsi di loro? Come faccio a dire che i campi sono interi in modo che doesnt messo in "anyType"

Grazie, Brian

+0

Se stai usando SQL Server 2005 o versioni successive, è necessario utilizzare una colonna XML. –

risposta

7

No, questi spazi dei nomi non rallentare la deserialisation. Quei URI non sono endpoint Web che le visite serialiser: Sono solo identificatori - etichette che capita di utilizzare lo schema URI Web al fine di garantire l'unicità. li si può tranquillamente lasciare in

+0

Come imbarazzante è ammettere che ho appena imparato qualcosa di nuovo dalla tua risposta? Mi sono sempre chiesto di quei namespace. – MusiGenesis

+0

@MusiGenesis, per quanto riguarda la tua ricerca, non è imbarazzante a tutti. – harpo

+1

Grazie, mi sono chiesto perché tanti stanno per tanta fatica per portarli fuori. – BrianK

0

Btw .. Se si ha realmente bisogno per ottenere gli spazi dei nomi predefiniti spogliato fuori:.

 XmlSerializer x = new XmlSerializer(msg.GetType()); 

     StringWriter sw = new StringWriter(); 

     var namespaces = new XmlSerializerNamespaces(); 
     namespaces.Add("", ""); 

     x.Serialize(sw, msg, namespaces); 

     string s = sw.ToString(); 
     sw.Close();