这困扰了我一段时间。我有型号:
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
然后我在空/空对象上获得无效的JSON转换(从我正在处理的API POV(:
{
"header": "unimportant",
"response": {
"projectId": "Prj_02022022_2",
"designBriefId": "DB_02022022_4",
"mdt": null,
"referenceMDT": [],
"ProductList": []
}
}
重点是我想序列化输出:
"mdt": {}
代替:
"mdt": null
所以问题是我怎样才能";标记";将该值序列化为空对象而不是null,或者如何将其转换为空对象?正如我所提到的,它困扰了我一段时间,我不知道如何解决这个问题。我试图改变整个问题,并用将其更改为忽略
JsonSerializerSettings {NullValueHandling = NullValueHandling.Ignore}
但问题是API的另一端必须接收空对象,空对象或缺少对象将被视为错误。
正如你在MDT模型中看到的,大多数都有bool属性,所以每当我将对象生成为new((并忽略null值时,它会用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
}
我非常感谢任何帮助,甚至是不可能的信息,但如果空对象和空对象之间有区别,我认为它是可以解决的,但我太笨了,无法弄清楚。
TL;博士:我有一个对象,每当我试图将其序列化为JSON时,它要么返回null,要么返回布尔值填充为"的对象;"假";,这两者都是错误的,我需要生成空对象。
为了避免错误,只需将bool更改为bool?
public class MDT
{
[Key]
public string mdtAssetId { get; set; }
public bool? isMDTDownloaded { get; set; }
public bool? isNamingConventionCorrect { get; set; }
}