c# - 在 C# 中使用德语小数分隔符对双值进行 XML 反序列化

标签 c# xml serialization localization xml-deserialization

我正在尝试反序列化 Movie来自“德语”xml 字符串的对象:

string inputString = "<?xml version=\"1.0\"?>"
    + "<movie title=\"Great Bollywood Stuff\">"
    + "<rating>5</rating>"
    + "<price>1,99</price>" // <-- Price with German decimal separator!
    + "</movie>";

XmlSerializer movieSerializer = new XmlSerializer(typeof(Movie));
Movie inputMovie;

using (StringReader sr = new StringReader(inputString))
{
    inputMovie = (Movie)movieSerializer.Deserialize(sr);
}
System.Console.WriteLine(inputMovie);

这里是Movie引用类:

[XmlRoot("movie")]
public class Movie
{

    [XmlAttribute("title")]
    public string Title { get; set; }

    [XmlElement("rating")]
    public int Rating { get; set; }

    [XmlElement("price")]
    public double Price { get; set; }

    public Movie()
    {

    }

    public Movie(string title, int rating, double price)
    {
        this.Title = title;
        this.Rating = rating;
        this.Price = price;
    }

    public override string ToString()
    {
        StringBuilder sb = new StringBuilder("Movie ");
        sb.Append("[Title=").Append(this.Title);
        sb.Append(", Rating=").Append(this.Rating);
        sb.Append(", Price=").Append(this.Price);
        sb.Append("]");

        return sb.ToString();
    }

}

只要我放一个<price>作为1.99它工作得很好。当我使用德语德语小数点分隔符时 1,99它不再工作了。

请多多指教

最佳答案

如前所述,这根本不是在 XML 中表示数值的有效方式。不过对于字符串来说没问题。你可以这样做:

[XmlIgnore]
public decimal Price {get;set;}

[XmlElement("price")]
public string PriceFormatted {
    get { return Price.ToString(...); }
    set { Price = decimal.Parse(value, ...); } 
}

其中“...”代表您选择的格式说明符和 CultureInfo

关于c# - 在 C# 中使用德语小数分隔符对双值进行 XML 反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8463733/

相关文章:

C#/SQL 错误 : There was an error parsing the query. [ token 行号 = 1, token 行偏移量 = 26,错误中的 token = 用户 ]

c# - 对返回类型和参数使用泛型

android - 组合文本和图像按钮,调整可绘制大小

javascript - 多少外部数据太多了? (XML 或 JSON)

python - 如何序列化 beautifulsoup 访问路径?

javascript - 需要一个 jQuery 表单反序列化器

c# - 反序列化错误

c# - 使用 LINQ 将 Dictionary<String,Int> 转换为 Dictionary<String,SomeEnum>?

C# .ToString ("X4") 在 Java 中等效

xml - SAX 解析异常 : "s4s-elt-character: Non-whitespace characters are not allowed in schema elements"