问题描述:
代码中对象类型是父类:
cs
public List<EmbossingActionConfigBase> EmbossingActionConfigBaseList;
但是保存的数据是子类数据,然后序列化或者反序列化的时候要求对象类型不丢失。
解决方法:
cs
var settings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Auto
};
string json = JsonConvert.SerializeObject(list, settings);
效果:
json字符串:
cs
"EmbossingActionConfigBaseList": {
"$type": "System.Collections.Generic.List`1[[FluentVision.Control.EmbossingActionConfigBase, FluentVision.Controls]], mscorlib",
"$values": [
{
"$id": "24",
"$type": "FluentVision.Control.StageZActionConfig, FluentVision.Controls",
"Gap": 500,
"Speed": 100.0,
"MaxForce": 4.0,
"MinForce": 1.0,
"Overtime": 100,
"EmbossingActionType": 0,
"Delay": 100
},
{
"$id": "25",
"$type": "FluentVision.Control.StageZActionConfig, FluentVision.Controls",
"Gap": 100,
"Speed": 50.0,
"MaxForce": 4.0,
"MinForce": 1.0,
"Overtime": 100,
"EmbossingActionType": 0,
"Delay": 100
},
{
"$id": "26",
"$type": "FluentVision.Control.StageZActionConfig, FluentVision.Controls",
"Gap": 30,
"Speed": 20.0,
"MaxForce": 4.0,
"MinForce": 1.0,
"Overtime": 100,
"EmbossingActionType": 0,
"Delay": 100
},
{
"$id": "27",
"$type": "FluentVision.Control.LevelingActionConfig, FluentVision.Controls",
"ToleranceError": 10.0,
"BaseGap": 30,
"EmbossingActionType": 1,
"Delay": 100
},
{
"$id": "28",
"$type": "FluentVision.Control.DetectMaskActionConfig, FluentVision.Controls",
"MaskAlignmentPositionDescription": "下视觉产品拍照位",
"EmbossingActionType": 2,
"Delay": 10
},
{
"$id": "29",
"$type": "FluentVision.Control.AlignmentActionConfig, FluentVision.Controls",
"ProductAlignmentPositionDescription": "下视觉相机压合位置产品拍照",
"EmbossingActionType": 3,
"Delay": 10
}
]
}
其中type字段就是类型描述,多个子类信息分开保存,反序列化的时候即使使用基类类型承接也不会丢失信息。
参考:C# Newtonsoft.Json 反序列化派生类数据丢失问题_c# newtonsoft json 派生类型-CSDN博客