2013-02-13 27 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オブジェクトを生成します。

しかし、私は、属性のいくつかの種類を使用して、ProductDTOからProductに、直列化の際に名前を変更したい:

[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

答えて

16

は、私が見ることはできませんが、XMLに関して次のことができるようにすべきです特にNameプロパティを使用して、DataContractAttributeを経由してタイプ名を制御します。ASP.NETのWeb APIを使用してデフォルトのXMLシリアライザがDataContractSerializerあるので

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が関連しています。 DataContractSerializerは、シリアル化されたクラスに適用されたDataContractAttributeとシリアル化されたクラスメンバに適用されたDataMemberAttributeによって構成されます。

+1

「クラス名をJSON直列データに変換」について:JSONはクラス名を出力しません。これはXML用です。 – Catalin

+0

@RaraituL OK、それはあなたのために今働いている願っ:) – aknuds1

3

オプションは、このためにデフォルト.Net Serialization attributesを使用することです:クラス名は、JSON-シリアル化されたデータにそれをしなければならない理由

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