XML-Serialisierung von enums
Habe ich Probleme mit dem serialisieren enum-Werte.
Hier ist der code:
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public class REQUEST
{
[System.Xml.Serialization.XmlAttributeAttribute()]
public string ID;
[System.Xml.Serialization.XmlAttributeAttribute()]
public REQUESTTypetype Type;
}
public enum REQUESTTypetype
{
One,
Two,
Three,
Four,
}
...
REQUEST request = new REQUEST();
request.ID = "1234";
request.Type = REQUESTTypetype.One;
XmlDocument doc = new XmlDocument();
MemoryStream ms = new MemoryStream();
StreamWriter sw = new StreamWriter(ms);
XmlSerializer xs = new XmlSerializer(typeof(REQUEST));
xs.Serialize(sw, request_group);
ms.Position = 0;
doc.Load(ms);
TestWriteXml(doc, @"C:\xml_test.xml");
Ist das Ergebnis:
<?xml version="1.0" encoding="utf-8" ?>
<REQUEST ID="1234" />
Warum die enum wird nicht serialisiert? Ich verwenden .NET Framework 2.0.
Danke.
- Ich vermute, dass etwas fehlt hier in Ihrem code, Sie werden serialisieren "xs.Serialize(sw, request_group)", aber Sie setzen Sie den Wert für "Anfrage". Was ist die definition von request_group, hat es den Typ festzulegen?
- es sollte "Anfrage", ändere ich einfach den Namen ein wenig.
- Was ist der code für dein TestWriteXml Funktion?
- public static void TestWriteXml(XmlDocument xml, string filename) { FileStream fileStream = new FileStream(filename, FileMode.Create, FileAccess.Write); StreamWriter sw = new StreamWriter(fileStream); sw.WriteLine(xml.InnerXml); sw.Flush(); sw.Close(); }
- VladV, ich habe versucht, [System.Xml.Serialisierung.XmlElement()] anstelle von [System.Xml.Serialisierung.XmlAttributeAttribute()] aber ohne Ergebnis.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich gefunden, was falsch war. Für jede enum-Typ
Habe ich diese:
Und in den code sollte ich dies tun:
Es funktioniert jetzt. Ich sollte nach Ihnen in meiner Frage, aber ich wollte nicht die Aufmerksamkeit auf diese "festgelegt" - Mitglieder an alle.
Vielen Dank für Ihre Antworten.
Tun Sie das gleiche problem sehen, wenn Sie den Typ auf "Zwei" oder "Drei"? Ist es denn "One" ist der default-Wert und kann so übernommen werden? Er kann ein Artefakt der laden diese in ein XmlDocument und dann speichern Sie es mit Ihrem code, dass hast du nicht gezeigt (TestWriteXml).
Diese leicht modifizierte version des Codes (ich bin das schreiben, um ein StringBuilder-und dann ToString ' Ing es am Ende)...
... mit GENAU der gleichen Typen wie du oben erwähnt scheint gut zu funktionieren. Dies bekomme ich bei der Konsole...
Ich nicht ändern die definition der ANFORDERUNG oder die enum-REQUESTTypetype.
Können Sie die Xml.Serialisierung.XmlEnum Attribut (siehe hier) schmücken die Werte von der enum.
Es ist ein blog-post von Kurt Claeys hier, dass könnte auch helfen.
In Ihrem code, der auch Mitglied:
?
Alle 3 müssen erfüllt werden. Für geschachtelte Typen, alle Eltern geben in der Verschachtelung werden, müssen öffentlich sein.
Zusätzliche Dinge, die ausschließen würde, es:
Versuchen Sie, [Flags] Attribut auf der enum.