C# 使用DataContractSerializer处理序列化中的数组

C# 使用DataContractSerializer处理序列化中的数组,c#,datacontractserializer,C#,Datacontractserializer,我有一个asp.net web api项目,我的用户模型有一个问题,该模型将字符串[]角色作为属性,但没有按照我的要求进行序列化 用户模型: [DataContract(Namespace = "")] public class User { [DataMember(Order = 0)] public string UserName { get; set; } //ro [DataMember(Order = 1)] public int CustomerI

我有一个asp.net web api项目,我的用户模型有一个问题,该模型将字符串[]角色作为属性,但没有按照我的要求进行序列化

用户模型:

[DataContract(Namespace = "")]
public class User
{
    [DataMember(Order = 0)]
    public string UserName { get; set; }  //ro

    [DataMember(Order = 1)]
    public int CustomerID { get; set; } //ro

    [DataMember(Order = 2)]
    public string Email { get; set; }

    [DataMember(Order = 3)]
    public string Phone { get; set; }

    [DataMember(Order = 4)]
    public string Mobile { get; set; }

    [DataMember(Order = 5)]
    public string FullName { get; set; }

    [DataMember(Order = 6)]
    public List<string> Roles { get; set; }

    [DataMember(Order = 7)]
    public string Culture { get; set; }

    [DataMember(Order = 8)]
    public string Language { get; set; }

    [DataMember(Order = 9)]
    public string TimeZone { get; set; }

    [DataMember(Order = 10)]
    public DateTime Created { get; set; } //ro

}
[DataContract(Namespace=”“)]
公共类用户
{
[数据成员(订单=0)]
公共字符串用户名{get;set;}//ro
[数据成员(顺序=1)]
public int CustomerID{get;set;}//ro
[数据成员(顺序=2)]
公共字符串电子邮件{get;set;}
[数据成员(顺序=3)]
公用字符串电话{get;set;}
[数据成员(顺序=4)]
公共字符串Mobile{get;set;}
[数据成员(顺序=5)]
公共字符串全名{get;set;}
[数据成员(顺序=6)]
公共列表角色{get;set;}
[数据成员(顺序=7)]
公共字符串区域性{get;set;}
[数据成员(顺序=8)]
公共字符串语言{get;set;}
[数据成员(顺序=9)]
公共字符串时区{get;set;}
[数据成员(顺序=10)]
创建的公共日期时间{get;set;}//ro
}
当我收到请求的结果时,它如下所示:

<User xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <UserName>User1</UserName>
  <CustomerID>1234</CustomerID>
  <Email>abc@xyz.lmn</Email>
  <Phone/>
  <Mobile/>
  <FullName>XYZ</FullName>
  <Roles xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
    <d2p1:string>AdminRole</d2p1:string>
    <d2p1:string>AlertsRole</d2p1:string>
  </Roles>
  <Culture>en-IN</Culture>
  <Language>en</Language>
  <Created>2014-04-21T11:26:22</Created>
</User>

用户1
1234
abc@xyz.lmn
XYZ
管理员角色
警报孔
恩恩
EN
2014-04-21T11:26:22
但我希望xml如下所示:-

<User xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <UserName>User1</UserName>
  <CustomerID>1234</CustomerID>
  <Email>abc@xyz.lmn</Email>
  <Phone/>
  <Mobile/>
  <FullName>XYZ</FullName>
  <Roles>
    <string>Role1</string>
    <string>Role2</string>
  </Roles>
  <Culture>en-IN</Culture>
  <Language>en</Language>
  <Created>2014-04-21T11:26:22</Created>
</User>

用户1
1234
abc@xyz.lmn
XYZ
角色1
角色2
恩恩
EN
2014-04-21T11:26:22
请建议我可以实施的任何解决方案


提前感谢

您可以通过创建具有相同命名空间的集合类型来完成此操作:

[CollectionDataContract(Namespace = "")]
public class StringList : List<string>
{
    public StringList() { }

    public StringList(IEnumerable<string> items) : base(items) { }
}

[DataContract(Namespace = "")]
public class User
{
    [DataMember(Order = 0)]
    public string UserName { get; set; }  //ro

    [DataMember(Order = 1)]
    public int CustomerID { get; set; } //ro

    [DataMember(Order = 2)]
    public string Email { get; set; }

    [DataMember(Order = 3)]
    public string Phone { get; set; }

    [DataMember(Order = 4)]
    public string Mobile { get; set; }

    [DataMember(Order = 5)]
    public string FullName { get; set; }

    [DataMember(Order = 6)]
    public StringList Roles { get; set; }

    [DataMember(Order = 7)]
    public string Culture { get; set; }

    [DataMember(Order = 8)]
    public string Language { get; set; }

    [DataMember(Order = 9)]
    public string TimeZone { get; set; }

    [DataMember(Order = 10)]
    public DateTime Created { get; set; } //ro
}
[CollectionDataContract(名称空间=”)]
公共类字符串列表:列表
{
公共字符串列表(){}
公共字符串列表(IEnumerable items):基本(items){}
}
[DataContract(名称空间=”)]
公共类用户
{
[数据成员(订单=0)]
公共字符串用户名{get;set;}//ro
[数据成员(顺序=1)]
public int CustomerID{get;set;}//ro
[数据成员(顺序=2)]
公共字符串电子邮件{get;set;}
[数据成员(顺序=3)]
公用字符串电话{get;set;}
[数据成员(顺序=4)]
公共字符串Mobile{get;set;}
[数据成员(顺序=5)]
公共字符串全名{get;set;}
[数据成员(顺序=6)]
公共字符串列表角色{get;set;}
[数据成员(顺序=7)]
公共字符串区域性{get;set;}
[数据成员(顺序=8)]
公共字符串语言{get;set;}
[数据成员(顺序=9)]
公共字符串时区{get;set;}
[数据成员(顺序=10)]
创建的公共日期时间{get;set;}//ro
}

创建一个自定义类
RolesList
,该类继承
List
并自己实现XML序列化。是否需要在用户类上设置命名空间?我也想处理Post场景。。。但我的角色对象总是空的。我试过StringList:List和AlwayList。在请求主体中,它扮演角色1。但我的角色对象仍然没有填充。有谁能帮我一下吗?如果您继承自泛型类型(例如,
集合
),那么您还必须使用。