我的一个类中有一个属性,我试图用 json.net 序列化它,我想“内联”,这意味着,我不想将该属性嵌套到具有属性名称的元素中,但其内容直接位于其父级中。
这是一个例子,假设我有以下类结构:
public interface ISteeringWheelIdentifier {}
public interface ISteeringWheel
{
ISteeringWheelIdentifier Identifier {get;}
}
public class ManufacturerIdentifier : ISteeringWheelIdentifier
{
public string ManufacturerEmail {get; set;}
}
public class PartNumberIdentifier : ISteeringWheelIdentifier
{
public string PartNumber {get; set;}
}
public class ClassicSteeringWheel : ISteeringWheel
{
public ClassicSteeringWheel(ManufacturerIdentifier identifier)
{
Identifier = identifier;
}
public string HornButtonManufacturer {get; set;}
public ISteeringWheelIdentifier Identifier {get;private set;}
}
public class ModernSteeringWheel : ISteeringWheel
{
public ModernSteeringWheel(PartNumberIdentifier identifier)
{
Identifier = identifier;
}
public string TouchpadManufacturer {get; set;}
public ISteeringWheelIdentifier Identifier {get;private set;}
}
public class Car
{
public string CarBrand {get; set;}
public ISteeringWheel SteeringWheel {get; set;}
}
如果我尝试使用以下代码序列化两个测试对象:
public static void Main()
{
var car1 = new Car{CarBrand="Ford", SteeringWheel = new ModernSteeringWheel(new PartNumberIdentifier{PartNumber = "123456"})};
var json = JsonConvert.SerializeObject(car1, Formatting.Indented);
Console.WriteLine(json);
var car2 = new Car{CarBrand="Toyota", SteeringWheel = new ClassicSteeringWheel(new ManufacturerIdentifier{ManufacturerEmail = "[email protected] /cdn-cgi/l/email-protection"})};
json = JsonConvert.SerializeObject(car2, Formatting.Indented);
Console.WriteLine(json);
}
你得到这个结果:
{
"CarBrand": "Ford",
"SteeringWheel": {
"TouchpadManufacturer": null,
"Identifier": {
"PartNumber": "123456"
}
}
}
{
"CarBrand": "Toyota",
"SteeringWheel": {
"HornButtonManufacturer": null,
"Identifier": {
"ManufacturerEmail": "[email protected] /cdn-cgi/l/email-protection"
}
}
}
但是,就我而言,标识符只是管理方向盘识别的不同方式的一种方法,我不需要拥有该属性。我期望得到的 Json 如下:
{
"CarBrand": "Ford",
"SteeringWheel": {
"TouchpadManufacturer": null
"PartNumber": "123456"
}
}
{
"CarBrand": "Toyota",
"SteeringWheel": {
"HornButtonManufacturer": null,
"ManufacturerEmail": "[email protected] /cdn-cgi/l/email-protection"
}
}
显然,我可以通过两者来做到这一点ManufacturerEmail
and PartNumber
in the ISteeringWheel
并把其中之一null
并设置忽略空值,但我宁愿在我的类中正确分隔事物。
我在这里用上面的代码创建了一个小提琴:https://dotnetfiddle.net/C9RPy9 https://dotnetfiddle.net/C9RPy9