InvalidCastException: Il valore non è un oggetto convertibile: System.String per IdTag
durante il tentativo deserializzare l'attributo xml.
Ecco il XML di esempio:
<?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>
classi campione:
public class Item
{
[XmlAttribute]
public string Name { get; set; }
[XmlAttribute]
public IdTag ParentId { get; set; }
}
[Serializable]
public class IdTag
{
public string id;
}
L'eccezione viene generata da Convert.ToType()
metodo (che viene chiamato da XmlSerializer
). AFAIK non è possibile "implementare" l'interfaccia IConvertible
per System.String
per convertire in IdTag
. So che posso implementare una proprietà proxy i.e:
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; }
}
}
C'è qualche altro modo?
Definitivamente un miglioramento - sposta 'new IdTag (..)' da getter a possedere il costruttore di classi. Grazie. –