ASP.net Web API:序列化时更改类名

时间:2013-02-13 10:42:15

标签: c# asp.net asp.net-mvc serialization

我有一个产品的数据传输对象类

public class ProductDTO
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    // Other properties
}

当Asp.net使用JSON(使用JSON.NET)或XML序列化对象时,它会生成ProductDTO个对象。

但是,我想使用某种属性在序列化期间更改名称,从ProductDTO更改为Product

[Name("Product")]
public class ProductDTO
{
    [Name("ProductId")]
    public Guid Id { get; set; }
    public string Name { get; set; }
    // Other properties
}

我该怎么做?

2 个答案:

答案 0 :(得分:17)

我无法理解为什么类名应该成为JSON序列化数据,但是对于XML,您应该能够通过DataContractAttribute控制类型名称,特别是通过Name属性:

using System.Runtime.Serialization;

[DataContract(Name = "Product")]
public class ProductDTO
{
    [DataMember(Name="ProductId")]
    public Guid Id { get; set; }
    [DataMember]
    public string Name { get; set; }
    // Other properties
}

DataContractAttribute是相关的,因为ASP.NET Web API的默认XML序列化程序是DataContractSerializer。 DataContractSerializer通过应用于序列化类的DataContractAttribute和应用于序列化类成员的DataMemberAttribute进行配置。

答案 1 :(得分:3)

选项是使用默认.Net Serialization attributes

[DataContract(Name = "Product")]
public class ProductDTO
{
    [DataMember(Name = "ProductId")]
    public Guid Id { get; set; }
    [DataMember]
    public string Name { get; set; }
    // Other properties
}