我明白了
InvalidCastException: Value is not a convertible object: System.String to IdTag
尝试反序列化 xml 属性时。
这是示例 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
调用)中抛出的。据我所知,没有办法为 System.String
“实现”IConvertible
接口(interface)以转换为 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; }
}
}
还有其他办法吗?
最佳答案
您必须告诉 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
代理对象应该被正确初始化。
关于c# - 如何使用 XmlSerializer 在 C# 中反序列化期间将 xml 属性转换为自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31051177/