是否可以将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]属性时的效果不一样。当我使用不同的Xml序列化器/反序列化器时,如果我有c ++ / java / objective c客户端,它也可能在以后出现问题。
对此有何想法?
答案 0 :(得分:0)
不创造常数,不,你不能这样做。
读取这些属性的代码可以更改为在另一个内部使用,但C#或.NET中没有任何内置允许这样做。
持续:
private const string AddItemName = "Add";
[XmlArray(ElementName = AddItemName)]
[XmlArrayItem(ElementName = "I want my " + AddItemName + " attribute here")]
public List<T> Add { get; private set; }