簡體   English   中英

如何使用XmlSerializer在C#中反序列化期間將xml屬性轉換為自定義對象

[英]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; }
    }
}

還有其他方法嗎?

您必須告訴XmlSerializerIdTag對象中需要查找的字符串。 據推測,您希望序列化該對象的屬性(而不是整個對象)。

所以,你可以改變這個:

[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM