Come posso mappa XML ad oggetti C#
-
01-07-2019 - |
Domanda
Ho un XML che voglio caricare di oggetti, manipolare gli oggetti (set di valori, i valori letti) e quindi salvare i XMLs indietro.È importante per me avere l'XML nella struttura (xsd) che ho creato.
Un modo per farlo è quello di scrivere il mio serializzatore, ma c'è un costruito in supporto o open source in C# che posso utilizzare?
Soluzione
È possibile generare serializable C# classi da uno schema (xsd) utilizzando xsd.exe:
xsd.exe dependency1.xsd dependency2.xsd schema.xsd /out:outputDir
Se lo schema ha delle dipendenze (incluso/schemi importati), devono essere inseriti tutti nella stessa riga di comando.
Altri suggerimenti
Questo codice (C# DotNet 1.0 in poi) funziona abbastanza bene per serializzare la maggior parte degli oggetti XML.(e ritorno) Non funziona per gli oggetti contenenti ArrayLists, e, se possibile, attenersi a usare solo le Matrici
using System;
using System.IO;
using System.Text;
using System.Xml.Serialization;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
public static string Serialize(object objectToSerialize)
{
MemoryStream mem = new MemoryStream();
XmlSerializer ser = new XmlSerializer(objectToSerialize.GetType());
ser.Serialize(mem, objectToSerialize);
ASCIIEncoding ascii = new ASCIIEncoding();
return ascii.GetString(mem.ToArray());
}
public static object Deserialize(Type typeToDeserialize, string xmlString)
{
byte[] bytes = Encoding.UTF8.GetBytes(xmlString);
MemoryStream mem = new MemoryStream(bytes);
XmlSerializer ser = new XmlSerializer(typeToDeserialize);
return ser.Deserialize(mem);
}
LINQ to XML è molto potente, soprattutto se si sta utilizzando .net 3.5, LINQ to XSD può essere utile anche a voi!
Utilizzare xsd.exe programma a riga di comando che viene fornito con visual studio per creare file di classe che è possibile utilizzare nel vostro progetto/soluzione, e il Sistema.Xml.La serializzazione dello spazio dei nomi (in particolare, la classe XmlSerializer) per serializzare/deserialze quelle classi a e dal disco.
utilizzando Sistema.Xml.La serializzazione;questo spazio dei nomi ha tutti gli attributi è necessario se si desidera mappa xml per qualsiasi oggetto random.In alternativa è possibile utilizzare il xsd.exe strumento
file xsd.xsd {/classes | /dataset} [/elemento:elemento] [/lingua:la lingua] [/spazio dei nomi:namespace] [/outputdir:directory] [URI:uri] che avrà il vostro file xsd e creare di c# o vb.net classi di fuori di essi.
http://msdn.microsoft.com/en-us/library/x6c1kb0s(VS.71).aspx
Sono d'accordo xsd è veramente schifo...Ma hanno fatto un'altra versione che quasi nessuno conosce.La sua chiamata xsd oggetto del generatore.La sua prossima versione e ha più opzioni.Esso genera file da XSD e opere fantastico.Se si dispone di un generatore di schema XML spy;creare un xsd xml e utilizzare questo strumento.Ho creato molto, molto complesso classi di utilizzo di questo strumento.Quindi creare classi parziali per le proprietà aggiuntive\ecc metodi, poi quando si aggiorna il tuo schema è solo regen le classi e tutte le modifiche che persistono parziale classi.
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=7075
xsd.exe Microsoft ha un sacco di bug :| Provare questo open source perla http://xsd2code.codeplex.com/
Abbiamo creato un quadro di riferimento che possono generare automaticamente in C# le classi di XML.La sua visivo modello di elemento a cui passare il tuo XML e le classi sono generati automaticamente nel vostro progetto.L'utilizzo di queste classi è possibile creare/leggere/scrivere file XML.
Controllare questo link per il framework e Visual C# modello di elemento: clicca qui
Scommetto NetDataContractSerializer può fare quello che vuoi.