序列化列表没有额外的元素

时间:2015-06-18 23:44:11

标签: c# xml serialization xmlserializer

我可以生成以下XML文档,但是我遇到了'ISKeyValueList'元素上的version属性问题。我正在使用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> 

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

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; }
}

当前输出

enter image description here

但是,这会在XML文档中添加额外的,不需要的元素(上面突出显示)。有没有办法可以通过配置模型来删除这个额外的元素,因为我宁愿避免设置自定义序列化器等。

1 个答案:

答案 0 :(得分:2)

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