我想创建一个要序列化的类。但是我想要在我班级中的每个成员上明确设置Order
- 属性。所以我写了这段代码:
public void Process(CodeNamespace code, XmlSchema schema)
{
var types = code.Types.Cast<CodeTypeDeclaration>().Where(x => !x.IsEnum);
foreach (var type in types)
{
foreach(var member in type.Members.Cast<CodeTypeMember>().Select((x, i) => new { Item = x, Order = i }))
{
member.Item.CustomAttributes.Add(new CodeAttributeDeclaration("XmlElementAttribute", ???);
}
}
}
我不知道如何将命名参数Order
设置为有效值。我已经尝试了new[] { Order = member.Order }
,但显然这根本不起作用。
所以我想要的是创建这段代码的东西:
public class MyClass
{
[XmlElement("MyProp", Order = 0)]
public int Prop1 { get; set; }
}
答案 0 :(得分:0)
解决方案非常简单。我将流程与XmlElement
- 自动添加和注意的属性进行了比较,属性名称不是XmlElementAttribute
而是System.Xml.Serialization.XmlElementAttribute
。此外 - 由于Order
- 参数是XmlElementAttribute
- 构造函数的参数,我们必须将其添加为CodeAttributeArgument
:
var attr = new CodeAttributeDeclaration("System.Xml.Serialization.XmlElementAttribute");
attr.Arguments.Add(new CodeAttributeArgument("Order", new CodePrimitiveExpression(member.Order)));
member.Item.CustomAttributes.Add(attr);