c# Automapper - 属性序列
c# Automapper - Sequence of Properties
类 创建如下:
public class Base
{
public int Id { get; set; }
}
public class Derived:Base
{
public string Name { get; set; }
}
Automapper 映射定义为:
CreateMap<DataRow, Base>()
.ForMember(m => m.Id, opt => opt.MapFrom(r => r["Id"]));
CreateMap<DataRow, Derived>()
.IncludeBase<DataRow, Base>()
.ForMember(m => m.Name, opt => opt.MapFrom(r => r["Name"]))
此映射的输出是:
{
"Name":"ABC",
"Id":1
}
预期结果:
{
"Id":1,
"Name":"ABC"
}
我想保持在基础和派生中定义的属性序列 class。
这与 Automapper 无关,该库不影响 JSON 序列化。
真正的问题是你有一个派生的 class。序列化库使用反射来获取属性,它从派生的 class 中的属性开始,并在层次结构中向上移动。您可以使用以下代码查看:
var props = string.Join(", ", typeof(Derived).GetProperties().Select(x => x.Name));
//props = "Name, Id"
但是,您可以使用一些属性来控制序列化。如果您使用的是 .NET 3+,那么您可能会使用 System.Text.Json 命名空间。这意味着您可以将模型更改为如下所示:
using System.Text.Json.Serialization;
public class Base
{
[JsonPropertyOrder(1)]
public int Id { get; set; }
}
public class Derived : Base
{
[JsonPropertyOrder(2)]
public string Name { get; set; }
}
或者,您可能正在使用 Newtonsoft JSON.Net,这意味着您的模型将如下所示:
using Newtonsoft.Json;
public class Base
{
[JsonProperty(Order = 1)]
public int Id { get; set; }
}
public class Derived : Base
{
[JsonProperty(Order = 2)]
public string Name { get; set; }
}
类 创建如下:
public class Base
{
public int Id { get; set; }
}
public class Derived:Base
{
public string Name { get; set; }
}
Automapper 映射定义为:
CreateMap<DataRow, Base>()
.ForMember(m => m.Id, opt => opt.MapFrom(r => r["Id"]));
CreateMap<DataRow, Derived>()
.IncludeBase<DataRow, Base>()
.ForMember(m => m.Name, opt => opt.MapFrom(r => r["Name"]))
此映射的输出是:
{
"Name":"ABC",
"Id":1
}
预期结果:
{
"Id":1,
"Name":"ABC"
}
我想保持在基础和派生中定义的属性序列 class。
这与 Automapper 无关,该库不影响 JSON 序列化。
真正的问题是你有一个派生的 class。序列化库使用反射来获取属性,它从派生的 class 中的属性开始,并在层次结构中向上移动。您可以使用以下代码查看:
var props = string.Join(", ", typeof(Derived).GetProperties().Select(x => x.Name));
//props = "Name, Id"
但是,您可以使用一些属性来控制序列化。如果您使用的是 .NET 3+,那么您可能会使用 System.Text.Json 命名空间。这意味着您可以将模型更改为如下所示:
using System.Text.Json.Serialization;
public class Base
{
[JsonPropertyOrder(1)]
public int Id { get; set; }
}
public class Derived : Base
{
[JsonPropertyOrder(2)]
public string Name { get; set; }
}
或者,您可能正在使用 Newtonsoft JSON.Net,这意味着您的模型将如下所示:
using Newtonsoft.Json;
public class Base
{
[JsonProperty(Order = 1)]
public int Id { get; set; }
}
public class Derived : Base
{
[JsonProperty(Order = 2)]
public string Name { get; set; }
}