C# XML-Serialisierung und-Dezimal-Wert
Bin ich mit dem XmlSerializer zu serialisieren eines C# - Objekt, das enthält eine Dezimalzahl, um eine xml-Zeichenfolge
z.B.
AnObject.ADecimalValue
Ich finde die Präzision variiert insbesondere auch dann, wenn ich explizit die Runde, wie unten einige Werte erste Ausgabe mit vier Werten nach dem Punkt, z.B. 12564.39 bekommt die Ausgabe als 12564.3900
AnObject.ADecimalValue = decimal.Round(AnObject.ADecimalValue, 2);
Dem serialisieren der code ist unten.
XmlSerializer serializer = new XmlSerializer(typeof(AnObject));
using (StringWriter writer = new StringWriter())
{
serializer.Serialize(writer, source);
string result = writer.ToString();
return result;
}
Wie kann ich sicherstellen, dass nur zwei Werte sind Ausgang out nach dem Komma
- Machen es zu einem string
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie das umsetzen
IXmlSerializable
neu zu definieren, wie Sie serialise Ihr Objekt?Dokumentation hier und eine gute übersicht, wie implment es hier.
Dann gibt es eine post hier von jemand mit einem ähnlichen (aber nicht verwandt) Problem zu verkaufen. Sie konnte sich um Ihre dezimalen richtig und sehen, ob das funktioniert, wenn nicht, dann Sie können schreiben Sie es als eine Zeichenfolge.
Ich glaube nicht, daß das Runden einer gleitpunktzahl, die helfen kann. Der serializer wandelt die Zahl in string nach eigenen Regeln. Das beste, was Sie tun können, ist die Einführung einer neuen Zeichenfolge-Eigenschaft, und formatieren Sie die Zahl im das und es zu serialisieren anstatt der ursprünglichen Anzahl.
Mehr auf das Thema, ähnliches Problem:
Sie können angeben, format für die XmlSerialization von datetime?
Hier, wie ich gelöst ein ähnliches problem und es funktioniert perfekt für mich.
In meinem Fall, ich baute es zu Währung, aber Sie können Preis.ToString("0.00") zum konvertieren der XML-element-zu-dezimal mit 2 Nullen.
DataType="decimal"
argument gab mir einen Runtime InvalidOperationException mit der Meldung "Datentyp decimal ist ein Ungültiger Wert für die Eigenschaft XmlElementAttribute.DataType. decimal konvertiert werden kann, um System.String." (Hinweis: die Nachricht wurde lokalisierte und übersetzte ich es wieder auf Englisch, es könnte also ein wenig unterscheiden).