2

我正在做一个项目,我需要使用 datacontract 序列化来序列化枚举集合。预期结果应如下所示

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

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

4

1 回答 1

0

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

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

投票最多的答案似乎表明

“这对于 DataContractSerializer (DCS) 是不可能的。DCS 不允许展开的集合元素”

我想我需要接受这一点并联系网络服务提供商以了解是否可以修改合同。

于 2013-05-10T09:07:08.450 回答