我尝试实现this post中所述的反序列化,但未成功:
(**我正在使用LinqPad对此进行测试,因此您可以在示例末尾看到.Dump()调用)
在此代码中,我得到“实例验证错误:”对于claves_sexo不是有效值”,因为它为空:
void Main()
{
string xmlString = "<Products><Product><Id>1</Id><Name>My XML product</Name><Sexo></Sexo></Product></Products>";
XmlSerializer serializer = new XmlSerializer(typeof(List<Product>), new XmlRootAttribute("Products"));
StringReader stringReader = new StringReader(xmlString);
List<Product> productList = (List<Product>)serializer.Deserialize(stringReader);
productList.Dump();
}
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public claves_sexo Sexo {get;set;}
}
public enum claves_sexo
{
HO,
MU,
ND
}
我希望Product的Sexo成员在没有通知的情况下被赋予枚举值ND = 2。
我一直在使用XmlIgnore属性,并创建了另一个成员以将空标记的值作为String导入,并将其分配给Sexo成员,但是我没有成功。
最终注:这是最终可以使用的版本:
void Main()
{
string xmlString = "<Products><Product><Id>1</Id><Name>My XML product</Name><Sexo>ND</Sexo></Product></Products>";
XmlSerializer serializer = new XmlSerializer(typeof(List<Product>), new XmlRootAttribute("Products"));
StringReader stringReader = new StringReader(xmlString);
List<Product> productList = (List<Product>)serializer.Deserialize(stringReader);
productList.Dump();
}
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
[XmlIgnore]
public claves_sexo Sexo {get;set;}
[XmlElement("Sexo")]
public string SexoAsString
{
get
{
return Sexo.ToString();
}
set
{
if (string.IsNullOrWhiteSpace(value))
{
Sexo = claves_sexo.ND;
}
else
{
Sexo = (claves_sexo)Enum.Parse(typeof(claves_sexo), value);
}
}
}
}
public enum claves_sexo
{
HO,
MU,
ND
}
谢谢大家!
罗杰
答案 0 :(得分:0)
您可以使用XmlEnum
属性:
public enum claves_sexo
{
[XmlEnum("HO")]HO,
[XmlEnum("MU")]MU,
[XmlEnum("")]ND
}
编辑:您可以使用具有相同值的多个名称来处理“”和“ ND”:
public enum claves_sexo
{
[XmlEnum("HO")]HO,
[XmlEnum("MU")]MU,
[XmlEnum("ND")]ND,
[XmlEnum("")]Default = ND,
}