我得到了
尝试反序列化xml属性时InvalidCastException: Value不是可转换对象: System.String到IdTag
。
以下是示例xml:
<?xml version="1.0" encoding="windows-1250"?>
<ArrayOfItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Item Name="Item Name" ParentId="SampleId" />
</ArrayOfItem>
示例类:
public class Item
{
[XmlAttribute]
public string Name { get; set; }
[XmlAttribute]
public IdTag ParentId { get; set; }
}
[Serializable]
public class IdTag
{
public string id;
}
从Convert.ToType()
方法(从XmlSerializer
调用)抛出异常。 AFAIK无法为IConvertible
“实施”System.String
界面转换为IdTag
。我知道我可以实现代理属性,即:
public class Item
{
[XmlAttribute]
public string Name {get; set;}
[XmlAttribute("ParentId")]
public string _ParentId { get; set; }
[XmlIgnore]
public IdTag ParentId
{
get { return new IdTag(_ParentId); }
set { _ParentId = value.id; }
}
}
还有其他办法吗?
答案 0 :(得分:2)
您必须在XmlSerializer
对象中告诉IdTag
需要查找的字符串。据推测,您希望序列化该对象的属性(而不是整个对象)。
所以,你可以改变这个:
[XmlAttribute]
public IdTag ParentId { get; set; }
到此:
[XmlIgnore]
public IdTag ParentIdTag { get; set; }
[XmlAttribute]
public string ParentId
{
get { return ParentIdTag.id; }
set { ParentIdTag.id = value; }
}
请注意这与您发布的内容之间的区别 - 当您反序列化时,您的ParentIdTag
代理对象应该正确初始化。