【问题标题】:ASP.net Web API: change class name when serializingASP.net Web API:序列化时更改类名
【发布时间】:2013-01-28 21:17:33
【问题描述】:

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

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
}

我该怎么做?

【问题讨论】:

  • 实例序列化为 JSON 时,名称 ProductDTO 是如何出现的? JSON 毕竟是无类型的,当我尝试使用 JSON.NET 序列化实例时,类名不存在。

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


【解决方案1】:

我不明白为什么类名应该进入 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 配置的。

【讨论】:

  • 关于“类名转换成 JSON 序列化数据”:你说得对,JSON 不输出类名,这只是用于 XML。
【解决方案2】:

一个选项是为此使用默认的.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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多