繁体   English   中英

生成用于xml序列化的代码

[英]generate code for xml-serialization

我想创建一个要序列化的类。 但是我希望在类中的每个成员上显式设置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 }但是显然这new[] { Order = member.Order }不起作用。

所以我想要创建此代码的东西:

public class MyClass 
{
    [XmlElement("MyProp", Order = 0)]
    public int Prop1 { get; set; }
}

解决方案非常简单。 我比较了过程XmlElement已自动添加,并注意到,该属性名称不-attributes XmlElementAttributeSystem.Xml.Serialization.XmlElementAttribute 此外-由于Order参数是XmlElementAttribute CodeAttributeArgument的参数,我们必须将其添加为CodeAttributeArgument

var attr = new CodeAttributeDeclaration("System.Xml.Serialization.XmlElementAttribute");
attr.Arguments.Add(new CodeAttributeArgument("Order", new CodePrimitiveExpression(member.Order)));

member.Item.CustomAttributes.Add(attr);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM