Forum » Programiranje » [C#] Xml Serializacija Attribut pred Namespace
[C#] Xml Serializacija Attribut pred Namespace
Shinobi ::
Pozdravljeni!
Imam problem, kateri mi bo spil vse živce. Uporabljam XmlSerializer zato mi
prosim ne odgovarjajte na temo XmlDocument, ker v tem primeru ne pride v poštev.
Začetek razreda:
Želim doseči to:
C# pa mi naredi:
Zakaj je version pred namespace?! Kako bi ga lahko postavil za namespace?
Koda za serializacijo v konzolo:
Imam problem, kateri mi bo spil vse živce. Uporabljam XmlSerializer zato mi
prosim ne odgovarjajte na temo XmlDocument, ker v tem primeru ne pride v poštev.
Začetek razreda:
[Serializable] [XmlRoot(ElementName = "COLLADA", IsNullable = false)] public class DaeModel { private const string DefaultNamespace = @"http://www.collada.org/2005/11/COLLADASchema"; private string _version = "1.4.1"; [XmlAttributeAttribute(AttributeName = "version", Namespace = DefaultNamespace)] public string Version { get { return _version; } set { _version = value; } }
Želim doseči to:
<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">
C# pa mi naredi:
<COLLADA version="1.4.1" xmlns="http://www.collada.org/2005/11/COLLADASchema">
Zakaj je version pred namespace?! Kako bi ga lahko postavil za namespace?
Koda za serializacijo v konzolo:
public void Save(string fileName) { XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.Encoding = Encoding.UTF8; settings.OmitXmlDeclaration = false; XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces(); namespaces.Add(string.Empty, DefaultNamespace); XmlWriter writer = XmlWriter.Create(Console.Out, settings); XmlSerializer serializer = new XmlSerializer(GetType(), DefaultNamespace); serializer.Serialize(writer, this, namespaces); }
Shinobi ::
Zaradi enih importerjev, ki so spisani v Cju in hardcoded berejo.
Sekundarni razlog:
vsi dokumenti so shranjeni tako, da je najprej namespace in potem attributi.
Sekundarni razlog:
vsi dokumenti so shranjeni tako, da je najprej namespace in potem attributi.
joze67 ::
Poskusi:
[Serializable] [XmlRoot(ElementName = "COLLADA", IsNullable = false)] public class DaeModel { [XmlAttribute(Order=1)] private const string DefaultNamespace = @"http://www.collada.org/2005/11/COLLADASchema"; [XmlAttribute(Order=2)] private string _version = "1.4.1"; ...
joze67 ::
My bad.
Po krajšem prebiranju dokumentacije (pot, katero si verjetno že prehodil) bo morda potrebno pisati lastni serializer.
Po krajšem prebiranju dokumentacije (pot, katero si verjetno že prehodil) bo morda potrebno pisati lastni serializer.
win64 ::
Sicer ena neučinkovita rešitev, preprosto ročno zamenjaš(String funkcije) vrstni red, po zapisu seveda.
Zgodovina sprememb…
- spremenil: win64 ()
Ericssony ::
Na razredu, ki ga serializiraš uporabi interface IXmlSerializable in implementiraj metode:
V WriteXml() metodi imaš zdaj možnost pisanja XML strukture vrstico za vrstico, isto tako pri branju.
GetSchema() (ta naj vedno vrne vrednost null)
ReadXml(XmlReader reader) in
WriteXml(XmlWriter writer)
V WriteXml() metodi imaš zdaj možnost pisanja XML strukture vrstico za vrstico, isto tako pri branju.
nightrage ::
Uporabljaš kej xsd tool. Najprej si narediš xsd shemo recimo v xmlspy-ju, iz katere s pomočjo xsd tool-a narediš objekt, ki ga lahko serializiraš v string in iz stringa v objekt.
Vedno ti bo naredil string xml shemo kakršno ti definiraš v xsd-ju. In še malo dokumentacije link
Vedno ti bo naredil string xml shemo kakršno ti definiraš v xsd-ju. In še malo dokumentacije link
Zgodovina sprememb…
- spremenil: nightrage ()
Looooooka ::
IXmlSerializable implementacija.
Orderbya na xmlattributeattribute ni, ker order ni pomemben ze v xml definiciji.
Na tvojem mestu ne bi niti zgubljal casa s tem.Ce katera koli storitev/program ne zna parsat XML-ja zaradi vrstnega reda atributov je pokvarjane storitev/program in ne tvoja serializacija.
Ce se ti gre zgolj za estetiko...pljunit v roke in IXmlSerializable oz pisanje kodo, ki ti sama spise ta xml :)
Orderbya na xmlattributeattribute ni, ker order ni pomemben ze v xml definiciji.
Na tvojem mestu ne bi niti zgubljal casa s tem.Ce katera koli storitev/program ne zna parsat XML-ja zaradi vrstnega reda atributov je pokvarjane storitev/program in ne tvoja serializacija.
Ce se ti gre zgolj za estetiko...pljunit v roke in IXmlSerializable oz pisanje kodo, ki ti sama spise ta xml :)
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C#] WPF vprašanjaOddelek: Programiranje | 1120 (742) | Ciklamen |
» | UserControl v Wrappanelu WPFOddelek: Programiranje | 1142 (964) | hurlimannxt |
» | Prireditev class = classOddelek: Programiranje | 1852 (1517) | noraguta |
» | VC# Zapis podatkov na diskOddelek: Programiranje | 2499 (1755) | matej_jack |
» | [C#] Problem z XMLOddelek: Programiranje | 1370 (1264) | RobyRob |