【发布时间】:2015-12-27 17:21:05
【问题描述】:
是否可以将 C# 属性(注释?)从一个声明传递到另一个声明?我正在尝试使以下工作:
观察以下假设代码:
[Serializable]
public class Something
{
[XmlArray(ElementName = "Array")]
[XmlArrayItem(ElementName = "Item")]
public List<UnpleasantlyNamedItem> Items { get; private set; }
}
现在,这将像魅力一样进行序列化和反序列化。它工作得非常好。但是对于我们的项目,我需要这样的东西。
[Serializable]
public class EvolvableList<T> where T : GameObject
{
[XmlArray(ElementName = "Add")]
[XmlArrayItem(ElementName = I want my "AddItemName" attribute here)]
public List<T> Add { get; private set; }
[XmlArray(ElementName = "Edit")]
[XmlArrayItem(ElementName = I want my "EditItemName" attribute here)]
public List<ObjectTransformation<T>> Edit { get; private set; }
[XmlArray(ElementName = "Remove")]
[XmlArrayItem(ElementName = I want my "RemoveItemName" attribute here)]
public List<ObjectReference<T>> Remove { get; private set; }
}
[Serializable]
public class UpgradeLevel
{
[XmlAttribute(AttributeName = "Level")
public int Level { get; set; }
[XmlElement(ElementName = "Models")]
[ExtXmlEvolvableList(AddItemName = "Model", EditItemName = "Model", RemoveItemName = "Model")]
public EvolvableList<Model> Models { get; private set; }
[XmlElement(ElementName = "Sprites")]
[ExtXmlEvolvableList(AddItemName = "Sprite", EditItemName = "Sprite", RemoveItemName = "Sprite")]
public EvolvableList<Sprite> Sprites { get; private set; }
}
这可能吗?我试着用谷歌搜索它,但我不确定如何用短语来确定要说的查询。我对注解的概念很陌生,因为我主要用 C/C++ 编写软件。
我已经尝试通过省略 [XmlArrayItem] 属性让序列化程序自行决定名称。这给了我一个相当笨拙的“ReferenceOfModel”元素名称。这本身并不是什么大问题。但是,在反序列化它时它会成为一个问题。当我使用 [XmlArrayItem] 属性时,这似乎根本不起作用。当我有 c++/java/objective c 客户端时,当我使用不同的 Xml 序列化器/反序列化器时,以后也可能会出现问题。
对此有什么想法吗?
【问题讨论】:
标签: c# xml serialization custom-attributes