我有以下课程
[DataContract(Namespace = "", Name = "VersionRange")]
public sealed class VersionRange
{
[DataMember(Name = "Lower")]
private readonly Version _lower;
[DataMember(Name = "Upper")]
private readonly Version _upper;
public VersionRange(Version lower, Version upper)
{
_lower = lower;
_upper = upper;
}
}我希望它能够从下面的XML序列化为de
<?xml version="1.0" encoding="utf-8"?>
<VersionRange>
<Lower>1.2.3.4</Lower>
<Upper>5.6.7.8</Upper>
</VersionRange>我试图通过实现IDataContractSurrogate来归档这个文件,但是没有成功。当我在typeof(string)中返回typeof(Version)的GetDataContractType方法时,反序列化失败,并且不调用GetDeserializedObject方法。
那么,是否有机会使用标准版本类并使其从"a.b.c.d"字符串中反序列化?
发布于 2012-03-27 09:51:42
一种方法是反序列化为string属性,然后在属性的set方法中将值转换为版本。
[DataMember(Name = "Lower")]
private string _lowerStr
{
set
{
_lower = new Version(value);
}
}
private Version _lower;
/// and the same for Upper.我见过这种常用的解析日期时间值的方法,这些值可能带有模糊的格式。
发布于 2012-03-27 10:30:13
好像你读错了XML。正确的XML应该是这样的。
<?xml version="1.0" encoding="utf-16"?>
<VersionRange xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Lower xmlns:d2p1="http://schemas.datacontract.org/2004/07/System">
<d2p1:_Build>1</d2p1:_Build>
<d2p1:_Major>12</d2p1:_Major>
<d2p1:_Minor>1</d2p1:_Minor>
<d2p1:_Revision>3</d2p1:_Revision>
</Lower>
<Upper xmlns:d2p1="http://schemas.datacontract.org/2004/07/System">
<d2p1:_Build>1</d2p1:_Build>
<d2p1:_Major>12</d2p1:_Major>
<d2p1:_Minor>1</d2p1:_Minor>
<d2p1:_Revision>3</d2p1:_Revision>
</Upper>
</VersionRange>https://stackoverflow.com/questions/9886704
复制相似问题