当我尝试将 XML 解析为对象时抛出 System.FormatException。据我所知,这是由于 System.Xml.Serialization.XmlSerializer.Deserialize 中使用的区域性导致的,它期望一个点作为十进制字符,但 xml 包含一个逗号。
对象如下所示:
public sealed class Transaction
{
[XmlElement("transactionDate")]
public DateTime TransactionDate { get; set; }
[XmlElement("transactionAmount")]
public decimal Amount { get; set; }
[XmlElement("transactionDescription")]
public string Description { get; set; }
[XmlElement("transactionType")]
public int Type { get; set; }
public static Transaction FromXmlString(string xmlString)
{
var reader = new StringReader(xmlString);
var serializer = new XmlSerializer(typeof(Transaction));
var instance = (Transaction) serializer.Deserialize(reader);
return instance;
}
}
XML:
<transaction>
<transactionDate> 2013-07-02 <transactionDate>
<transactionAmount>-459,00</transactionAmount>
<transactionDescription>description</transactionDescription>
<transactionType>1</transactionType>
</transaction>
我通过引入第二个属性来使用我自己的文化解析第一个属性来使其工作:
namespace MyNamespace
{
[XmlRoot("transaction"), XmlType("Transaction")]
public sealed class Transaction
{
[XmlElement("transactionDate")]
public DateTime TransactionDate { get; set; }
[XmlElement("transactionAmount")]
public string Amount { get; set; }
public decimal AmountAsDecimal {
get
{
decimal value;
Decimal.TryParse(Amount, NumberStyles.Any, CultureInfo.CreateSpecificCulture("sv-SE"), out value);
return value;
}
}
[XmlElement("transactionDescription")]
public string Description { get; set; }
[XmlElement("transactionType")]
public int Type { get; set; }
public static Transaction FromXmlString(string xmlString)
{
var reader = new StringReader(xmlString);
var serializer = new XmlSerializer(typeof(Transaction));
var instance = (Transaction) serializer.Deserialize(reader);
return instance;
}
}
}
它公开了一个我不想要的额外属性。
所以我的问题是:是否有另一种方法可以做到这一点,而无需遍历每个元素并将其“手动”解析/分配给对象?
最佳答案
XML 序列化器使用标准化的 Number 和 DateTime 格式,该标准在 W3C 模式数据类型规范中定义 http://www.w3.org/TR/xmlschema-2/ .
不要期望 XmlSerializer
会关注线程的 CultureInfo
,它有意使用标准化格式以确保您可以独立于区域性/语言环境进行序列化/反序列化。
关于c# - 由于格式化,XML 反序列化在十进制解析时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17437946/