控制集合序列化

本文关键字:序列化 集合 控制 | 更新日期: 2023-09-27 18:12:20

我正在工作一个项目,我需要序列化使用数据合约序列化的枚举集合。预期的结果应该如下所示

<Filters>
   <MemberType>1</MemberType>
   <MemberType>2</MemberType>
   <MemberType>3</MemberType>
</Filters>

这是要序列化的类:

[DataContract(Name = "Filters")]
public class Filters
{
    private ObservableCollection<Nullable<MemberTypeEnum>>  m_enmMemberType;
    [DataMember(IsRequired = false, Name = "MemberType", Order = 1, EmitDefaultValue = false)]
    public ObservableCollection<Nullable<MemberTypeEnum>> MemberType
    {
        get
        {
            return m_enmMemberType;
        }
        set
        {
            if (m_enmMemberType != value)
            {
                m_enmMemberType = value;
                NotifyPropertyChanged("MemberType");
            }
        }
    } 
}
[DataContract(Name = "MemberTypeEnum")]
public enum MemberTypeEnum
{
    [EnumMember(Value="1")]
    [XmlEnum(Name="1")]
    T_1 = 1,
    [EnumMember(Value="2")]
    [XmlEnum(Name="2")]
    T_2 = 2,
    [EnumMember(Value="3")]
    [XmlEnum(Name="3")]
    T_3 = 3,
} 

问题是我得到的结果略有不同:

<Filters>
   <MemberType>
        <MemberTypeEnum>1</MemberTypeEnum>
        <MemberTypeEnum>2</MemberTypeEnum>
        <MemberTypeEnum>3</MemberTypeEnum>
   </MemberType>
</Filters>

是否有办法修改序列化(或者我做错了什么),以便我可以得到预期的结果?

控制集合序列化

我做了更多的研究,我发现了另一个问题似乎与我的问题有关:

CollectionDataContract序列化不添加自定义属性(datammember)

获得最多赞的答案似乎表明

"这在DataContractSerializer (DCS)中是不可能的。DCS的不允许展开集合元素

我想我需要接受这一点,并联系网络服务提供商,看看是否有可能修改合同。