使用XmlSerializer将对象序列化为c#中的对象列表,选择数组项标记

使用XmlSerializer将对象序列化为c#中的对象列表,选择数组项标记,c#,xml,serialization,C#,Xml,Serialization,我有这门课: [XmlRoot("SIT_ENTRY")] public class SitEntry { [XmlAttribute("STR_ENTRY_ID", DataType = "string")] public string EntryId { get; set; } } 那么这个, [XmlRoot("SIT_ENTRY_LIST")] public class SitEntryList : List<SitEntry> { } xml是,这正是我

我有这门课:

[XmlRoot("SIT_ENTRY")]
public class SitEntry
{
    [XmlAttribute("STR_ENTRY_ID", DataType = "string")]
    public string EntryId { get; set; }
}
那么这个,

[XmlRoot("SIT_ENTRY_LIST")]
public class SitEntryList : List<SitEntry>
{
}
xml是
,这正是我想要的。 现在,让我们序列化第二个:

var sitentrylist = new SitEntryList
{
    new SitEntry
    {
        EntryId = "Entry1"
    },
    new SitEntry
    {
        EntryId = "Entry2"
    }
};
sXml = SerializeToString(sitentrylist);
xml是

<SIT_ENTRY_LIST>
    <SitEntry STR_ENTRY_ID="Entry1" />
    <SitEntry STR_ENTRY_ID="Entry2" /> 
</SIT_ENTRY_LIST>

而不是

<SIT_ENTRY_LIST>
    <SIT_ENTRY STR_ENTRY_ID="Entry1" />
    <SIT_ENTRY STR_ENTRY_ID="Entry2" /> 
</SIT_ENTRY_LIST>


如我所愿。我该怎么办?谢谢

对于旧的XmlSerializer中的数组,有一种奇怪的行为,我从来没有完全弄清楚。我从来没有遇到过DataContractSerializer做类似事情的问题

您不能使用DataContractSerializer有什么原因吗

[DataContract(“SIT_条目”)]
公共类站点入口
{
[数据成员(“STR_ENTRY_ID”)]
公共字符串EntryId{get;set;}
}
[数据合同(“SIT_条目列表”)]
公共类SiteEntryList:列表
{
}
使用(MemoryStream requestObjectStream=new MemoryStream())
{   
DataContractSerializer serializer=新的DataContractSerializer(typeof(SitEntry));
WriteObject(requestObjectStream,objectToSerialize);
}

我发现,这里有一个可能的解决方案:

[XmlRoot("SIT_ENTRY_LIST")]
public class SitEntryList
{
    [XmlElement("SIT_ENTRY", IsNullable = true)]
    public List<SitEntry> EntryList { get; set; }
}

[...]

var sitentrylist = new SitEntryList
{
    EntryList = new List<SitEntry>
    {
        new SitEntry
        {
            EntryId = "Entry1"
        },
        new SitEntry
        {
            EntryId = "Entry2"
        }
    }
};
s = SerializeToString(sitentrylist);
[XmlRoot(“坐席条目列表”)]
公共类SitEntryList
{
[XmlElement(“SIT_条目”,IsNullable=true)]
公共列表条目列表{get;set;}
}
[...]
var sitentrylist=新建sitentrylist
{
EntryList=新列表
{
新址
{
EntryId=“Entry1”
},
新址
{
EntryId=“Entry2”
}
}
};
s=序列化字符串(SiteEntryList);
输出为

<SIT_ENTRY_LIST>
    <SIT_ENTRY STR_ENTRY_ID="Entry1" />
    <SIT_ENTRY STR_ENTRY_ID="Entry2" /> 
</SIT_ENTRY_LIST>

随我的便

[DataContract("SIT_ENTRY")]
public class SitEntry
{
    [DataMember("STR_ENTRY_ID")]
    public string EntryId { get; set; }
}


[DataContract("SIT_ENTRY_LIST")]
public class SitEntryList : List<SitEntry>
{
}

using (MemoryStream requestObjectStream = new MemoryStream())
{   
    DataContractSerializer serializer = new DataContractSerializer(typeof(SitEntry));
    serializer.WriteObject(requestObjectStream, objectToSerialize);
}
[XmlRoot("SIT_ENTRY_LIST")]
public class SitEntryList
{
    [XmlElement("SIT_ENTRY", IsNullable = true)]
    public List<SitEntry> EntryList { get; set; }
}

[...]

var sitentrylist = new SitEntryList
{
    EntryList = new List<SitEntry>
    {
        new SitEntry
        {
            EntryId = "Entry1"
        },
        new SitEntry
        {
            EntryId = "Entry2"
        }
    }
};
s = SerializeToString(sitentrylist);
<SIT_ENTRY_LIST>
    <SIT_ENTRY STR_ENTRY_ID="Entry1" />
    <SIT_ENTRY STR_ENTRY_ID="Entry2" /> 
</SIT_ENTRY_LIST>