在没有额外元素的情况下序列化列表

Serialize List Without an Extra Element

我可以生成以下 XML 文档,但是我在“ISKeyValueList”元素的版本属性方面遇到了问题。我正在使用 xmlSerializer。我应该注意到这个 XML 被传递给一个 API ,它需要如下的确切结构。

<Userdata>
  <ISKeyValueList  version="1.00">
     <Item type="String" key="AgeOfDependents">8,6,1<Item/>
     <Item type="Boolean" key="SecuritiesInPosession"> True </Item>
     <Item type="Boolean" key="SecuritiesOwners"> True </item>
  </ISKeyValueList>
</Userdata> 

我已经阅读了几个堆栈溢出赏金,从中我了解到要将版本属性添加到列表中,我必须将列表移动到另一个 class。下面生成上面的结构,但是它添加了一个我想避免的额外元素。

C#

UserData newUserData = new UserData();
newUserData.ISKeyValueList = new DataProperties();
newUserData.ISKeyValueList.Items = new List<Item>()
{
   new Item()
   { 
      Type = "String", 
      Key = "AgeOfDependents", 
      //Add data from form
      Value = string.Join(",", application.applicants[0].ageOfDependants)  
    },
    new Item(){ Type = "Boolean", Key = "SecuritiesInPossession", Value = "True" }
    };

newClientDetails.UserData = newUserData;

//Pass object to serializer here

型号

public class UserData
{
    public DataProperties ISKeyValueList { get; set; }
}

public class DataProperties
{
    [XmlAttribute("version")]
    public string Version { get; set; }
    public List<Item> Items { get; set; }

    public DataProperties()
    {
        Version = "1.00";
    }
}

public class Item
{
    [XmlAttribute("type")]
    public string Type { get; set; }
    [XmlAttribute("key")]
    public string Key { get; set; }
    [XmlText]
    public string Value { get; set; }
}

当前输出

然而,这会向 XML 文档添加额外的、不需要的元素(上面突出显示的)。有没有一种方法可以通过配置模型来删除这个额外的元素,因为我宁愿避免设置自定义序列化程序等。

将属性 [XmlElement("Item")] 添加到您的 DataProperties.Items 属性。