ASP.net Web API: изменение имени класса при сериализации

У меня есть класс Data Transfer Object для продукта

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
}

Как я могу это сделать?

Ответ 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 имеет значение, потому что XML-сериализатор по умолчанию с ASP.NET Web API DataContractSerializer. DataContractSerializer настраивается с помощью DataContractAttribute, применяемого к сериализованным классам, и DataMemberAttribute применительно к сериализованным членам класса.

Ответ 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
}