[英]C#/.NET XML Serializer - using a property as element name
警告 - 我不是xml大師。
這是我有的:
<Fields>
<Field name="BusinessName" look-up="true">My Business</Field>
<Field name="BusinessType" look-up="false">Nobody really knows!</Field>
</Fields>
這映射回:
[XmlArrayItem(ElementName = "Field")]
public List<UserInfoField> Fields;
和
[Serializable, XmlRoot("Field")]
public class UserInfoField
{
[XmlAttributeAttribute("name")]
public string Name;
[XmlText]
public string Value;
[XmlAttributeAttribute("look-up")]
public bool LookUp;
}
無論如何都要獲得此序列化輸出:
<Fields>
<BusinessName look-up="true">My Business</BusinessName>
<BusinessType look-up="false">Nobody really knows!</BusinessType>
</Fields>
我明白這可能過於神奇,並且可以想象有一個很好的理由這不應該起作用......但我認為它可能,這是一個好地方問:)
XmlSerializer(實際上,所有Framework序列化程序實際上)本地序列化類型,而不是名稱。 歸屬裝飾器允許您在名稱之前使用它,但這些是靜態運行時查找,因此它們不允許您使用該結構插入序列化過程。
相反,您要做的是編寫自己的序列化例程。 這將允許您覆蓋所需的節點命名序列 - 基本上插入Name字段的屬性作為節點名稱。 您對實現IXmlSerializable接口感興趣。 請記住,這也會影響反序列化。
您可以使用[XmlArray]和[XmlArrayItem]和屬性,如此處所述http://msdn.microsoft.com/en-us/library/2baksw0z(v=vs.71).aspx
[XmlArray("Fields")]
[XmlArrayItem("Field")]
public List<UserInfoField> Fields;
但是,我建議你序列化arroung根級別:
<root>
<Fields>
<Field name="BusinessName" look-up="true">My Business</Field>
<Field name="BusinessType" look-up="false">Nobody really knows!</Field>
</Fields>
</root>
因此,您將擁有一個包含根和列表的主類以及該元素的另一個類:
[Serializable, XmlRoot("Root")]
public class Fields
{
[XmlArray("Fields")]
[XmlArrayItem(ElementName = "Field")]
public List<UserInfoField> Fields;
}
[Serializable, XmlRoot("Field")]
public class UserInfoField
{
[XmlAttributeAttribute("name")]
public string Name;
[XmlText]
public string Value;
[XmlAttributeAttribute("look-up")]
public bool LookUp;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.