я пытаюсь десериализацией Movie
объекта от «немецкой» Строки XML:XML-Десериализация двойного значения с немецким десятичным разделителем в C#
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-Schema двойной должен быть представлен с помощью. http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/#decimal, поэтому это поведение по дизайну. Вы можете заменить тип цены на строку, а затем иметь несериализованное свойство Realprice, которое использует Double.Parse с подходящим форматированием string – rene
xml предоставляется мне в этом формате, и я ничего не могу с этим поделать. но спасибо за ваш ответ! –
Важное примечание: значения валюты должны быть почти всегда десятичными, а не двойными –