2013-02-13 6 views
11

Ho una classe oggetto di trasferimento dati per un prodottoASP.net Web API: cambio di nome della classe durante la serializzazione

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

Quando l'Asp.net serializza l'oggetto in JSON (utilizzando JSON.NET) o in XML, esso genera oggetti ProductDTO.

Tuttavia, voglio cambiare il nome durante la serializzazione, ProductDTO-Product, utilizzando qualche tipo di attributi:

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

Come posso fare questo?

+0

Come si presenta ProductDTO quando un'istanza viene serializzata su JSON? Dopo tutto, JSON non è tipizzato e quando provo a serializzare un'istanza con JSON.NET, il nome della classe non è presente. – aknuds1

risposta

16

non riesco a capire perché il nome della classe dovrebbe rendere nei dati JSON-serializzati, ma per quanto riguarda XML si dovrebbe essere in grado di controllare il nome del tipo via DataContractAttribute, in particolare tramite la proprietà 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 è rilevante perché il serializzatore XML predefinito con ASP.NET Web API è DataContractSerializer. DataContractSerializer è configurato tramite DataContractAttribute applicato alle classi serializzate e DataMemberAttribute applicato ai membri di classe serializzati.

+1

Informazioni sul "nome classe in dati serializzati JSON": hai ragione, JSON non restituisce il nome classe, questo è solo per XML. – Catalin

+0

@RaraituL OK, spero che stia funzionando per te ora :) – aknuds1

3

Una possibilità è quella di utilizzare il valore predefinito .Net Serialization attributes per questo:

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