在 Newtonsoft.JSON 中序列化空对象而不是 null
Serialize empty object instead of null in Newtonsoft.JSON
这困扰了我一段时间。我有型号:
public class Main
{
public Header header { get; set; }
public Response response { get; set; }
}
public class Response
{
public string projectId { get; set; }
public string designBriefId { get; set; }
public MDT mdt { get; set; }
public List<ReferenceMDT> referenceMDT { get; set; }
public List<ProductList> ProductList { get; set; }
}
public class MDT
{
[Key]
public string mdtAssetId { get; set; }
public bool isMDTDownloaded { get; set; }
public bool isNamingConventionCorrect { get; set; }
}
每当我将此对象序列化为 JSON 使用:
Newtonsoft.Json
然后我变得无效(来自我正在处理的 API POV)JSON empty/null 对象上的转换:
{
"header": "unimportant",
"response": {
"projectId": "Prj_02022022_2",
"designBriefId": "DB_02022022_4",
"mdt": null,
"referenceMDT": [],
"ProductList": []
}
}
重点是我要序列化输出:
"mdt": {}
而不是:
"mdt": null
所以问题是我如何“标记”此值以序列化为空对象而不是空对象,或者如何将其转换为空对象?
正如我所提到的,它困扰了我一段时间,我不确定如何解决这个问题。我试图改变整个问题并将其更改为
忽略
JsonSerializerSettings {NullValueHandling = NullValueHandling.Ignore}
但问题是 API 的另一端必须接收空对象,null 或缺少对象将被视为错误。
正如您在 MDT 模型中看到的那样,主要是 bool 属性,因此每当我将对象生成为 new() 并忽略空值时,它会用 false 填充所有 bool,从而生成一个也被认为是错误的对象:
"mdt": {
"mdtAssetId": null,
"isMDTDownloaded": false,
"isNamingConventionCorrect": false,
"isFolderStructureProvidedByAgencyCorrect": false,
"heroImageGuidelinesAvailable": false,
"allImagesAvailable": false,
"isDesignTargetLocked": false,
"isPackagingGuidelinesAvailable": false,
"isRegulatoryGuidelinesAvailable": false,
"mdtResponse": null,
"pmaCommentsforMDT": null
}
我将非常感谢任何帮助甚至信息,这是不可能的,但如果空对象和 null 对象之间存在差异,我认为它是可以解析的,但我太笨了,无法弄清楚。
TL;DR:
I've got object and whenever I'm trying to serialize it to JSON, it's either returning me null, or object with bool values filled as "false", which both are error and I need empty object generated.
为了避免错误,只需将 bool 更改为 bool?
public class MDT
{
[Key]
public string mdtAssetId { get; set; }
public bool? isMDTDownloaded { get; set; }
public bool? isNamingConventionCorrect { get; set; }
}
这困扰了我一段时间。我有型号:
public class Main
{
public Header header { get; set; }
public Response response { get; set; }
}
public class Response
{
public string projectId { get; set; }
public string designBriefId { get; set; }
public MDT mdt { get; set; }
public List<ReferenceMDT> referenceMDT { get; set; }
public List<ProductList> ProductList { get; set; }
}
public class MDT
{
[Key]
public string mdtAssetId { get; set; }
public bool isMDTDownloaded { get; set; }
public bool isNamingConventionCorrect { get; set; }
}
每当我将此对象序列化为 JSON 使用:
Newtonsoft.Json
然后我变得无效(来自我正在处理的 API POV)JSON empty/null 对象上的转换:
{
"header": "unimportant",
"response": {
"projectId": "Prj_02022022_2",
"designBriefId": "DB_02022022_4",
"mdt": null,
"referenceMDT": [],
"ProductList": []
}
}
重点是我要序列化输出:
"mdt": {}
而不是:
"mdt": null
所以问题是我如何“标记”此值以序列化为空对象而不是空对象,或者如何将其转换为空对象? 正如我所提到的,它困扰了我一段时间,我不确定如何解决这个问题。我试图改变整个问题并将其更改为
忽略JsonSerializerSettings {NullValueHandling = NullValueHandling.Ignore}
但问题是 API 的另一端必须接收空对象,null 或缺少对象将被视为错误。
正如您在 MDT 模型中看到的那样,主要是 bool 属性,因此每当我将对象生成为 new() 并忽略空值时,它会用 false 填充所有 bool,从而生成一个也被认为是错误的对象:
"mdt": {
"mdtAssetId": null,
"isMDTDownloaded": false,
"isNamingConventionCorrect": false,
"isFolderStructureProvidedByAgencyCorrect": false,
"heroImageGuidelinesAvailable": false,
"allImagesAvailable": false,
"isDesignTargetLocked": false,
"isPackagingGuidelinesAvailable": false,
"isRegulatoryGuidelinesAvailable": false,
"mdtResponse": null,
"pmaCommentsforMDT": null
}
我将非常感谢任何帮助甚至信息,这是不可能的,但如果空对象和 null 对象之间存在差异,我认为它是可以解析的,但我太笨了,无法弄清楚。
TL;DR: I've got object and whenever I'm trying to serialize it to JSON, it's either returning me null, or object with bool values filled as "false", which both are error and I need empty object generated.
为了避免错误,只需将 bool 更改为 bool?
public class MDT
{
[Key]
public string mdtAssetId { get; set; }
public bool? isMDTDownloaded { get; set; }
public bool? isNamingConventionCorrect { get; set; }
}