2013-02-13 30 views
11

時,我有一個數據傳輸對象類產品ASP.net的Web API:改變類的名稱序列化

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

當Asp.net串行化JSON(使用JSON.NET)或XML對象,它生成ProductDTO對象。

不過,我想序列化過程中改名換姓,從ProductDTOProduct,使用某種屬性:

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

我怎樣才能做到這一點?

+0

將實例序列化爲JSON時名稱ProductDTO的名稱如何?畢竟JSON是無類型的,當我嘗試用JSON.NET序列化一個實例時,類名不存在。 – aknuds1 2013-02-13 11:11:29

回答

16

我看不出爲什麼類名應該要把它變成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

關於「將類名轉換爲JSON序列化數據」:你說得對,JSON不會輸出類名,這僅僅適用於XML。 – Catalin 2013-02-13 11:39:34

+0

@RaraituL好的,希望現在爲你工作:) – aknuds1 2013-02-13 11:42:13

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 
}