[英]How to change xml attribute while deserialization with xmlserializer c#?
[英]How to convert xml attribute to custom object during deserialization in C# using XmlSerializer
我明白了
InvalidCastException: Value不是可轉換對象:System.String到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
調用Convert.ToType()
拋出異常。 AFAIK沒有辦法為System.String
“實現” IConvertible
接口轉換為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
代理對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.