que estoy tratando de deserializar un objeto Movie
de un "alemán" cadena XML:XML-Deserialización de valor doble con separador decimal alemán en 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);
aquí la clase Movie
para referencia:
[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();
}
}
siempre que puse un <price>
como 1.99
funciona perfectamente. cuando uso el separador decimal alemán alemán 1,99
ya no funciona.
Por favor, consejos
¿Tiene un esquema asociado? En la especificación XML-Schema, un doble debe representarse con a. http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/#decimal, por lo que este comportamiento es por diseño. Puede reemplazar el tipo de Precio por una cadena y luego tener una propiedad no-especializada Realprice que use una Double.Parse con una cadena de formato adecuada – rene
El xml me es dado en este formato y no puedo hacer nada al respecto. pero gracias por tu respuesta! –
Nota importante: los valores de las monedas casi siempre deben ser decimales, no dobles –