C# 一个节点下的不同属性

C# 一个节点下的不同属性,c#,xml-serialization,C#,Xml Serialization,我有一个对象,我正在使用xml序列化程序进行序列化。是否可以本质上插入任意子根节点,并将某些属性分配给该根节点 一些属性 公共int ID{get;set;} public object ActivityType { get; set; } public int ObjectId { get; set; } public string RelatedObjects { get; set; } public string Parameters { get; s

我有一个对象,我正在使用xml序列化程序进行序列化。是否可以本质上插入任意子根节点,并将某些属性分配给该根节点

一些属性 公共int ID{get;set;}

    public object ActivityType { get; set; }

    public int ObjectId { get; set; }

    public string RelatedObjects { get; set; }

    public string Parameters { get; set; }

    public string Tag { get; set; }

    public List<Condition> Conditions { get; set; }

    public bool OnlySaveIfValid { get; set; }
现在,当我用xml serialize序列化它时,我得到:

 <?xml version="1.0" encoding="utf-16"?>
<FNActivity>
  <ID>0</ID>
  <ObjectId>0</ObjectId>
  <Conditions>
   <Condition>
    <Critical>false</Critical>
    <ValidIf>false</ValidIf>
    <IsValid>false</IsValid>
  </Condition>
  <Condition>
    <Critical>false</Critical>
    <ValidIf>false</ValidIf>
    <IsValid>false</IsValid>
    </Condition>
  </Conditions>
 <OnlySaveIfValid>false</OnlySaveIfValid>
</FNActivity>
我想要得到的Xml是:

<?xml version="1.0" encoding="utf-16"?>
<FNActivity>
  <ID>0</ID>
  <ObjectId>0</ObjectId>
       **<VALIDATION>
         <Conditions>
           <Condition>
           <Critical>false</Critical>
           <ValidIf>false</ValidIf>
           <IsValid>false</IsValid>
         </Condition>
         <Condition>
          <Critical>false</Critical>
          <ValidIf>false</ValidIf>
          <IsValid>false</IsValid>
         </Condition>
        </Conditions>
        <OnlySaveIfValid>false</OnlySaveIfValid>
      **</VALIDATION>
  </FNActivity>

我认为最简单的方法是创建一个验证类/对象来存储条件。您可以实现IXmlSerializable来手动执行此操作,但这似乎有些过分。最好是创建一个与XML模型密切匹配的对象模型,然后将序列化问题与应用程序问题分开。@ChrisSinclair如果这是唯一的实例,我有点同意,然而,在许多领域中,我们正在从使用人工编写的XML SCEHMA和以编程方式编写的XML模式转换过来,因此可读性仍然是需要的。而且,以我想要的方式对代码进行序列化似乎不是正确的解决方案。那么,正确的解决方案是相对的。您使用的是XmlSerializer类,因此,一般来说,您只能按预期的方式使用它;从这个意义上说,正确的解决方案是分离您的关注点,并按照XmlSerializer认为正确的方式构建数据模型。如果您使用两个不同的模式来连接到同一个底层数据模型,那么将序列化关注点与应用程序逻辑关注点分离就更加重要了。正如我所建议的,您仍然可以利用IXmlSerializable并手动插入节点。IXmlSerializable…我将对此进行研究。谢谢