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
}