我必须使用.NET内置类进行JSON反序列化,并找到System.Web.Script.Serialization
:
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
return serializer.Deserialize<T>(str)
无法切换到Newtonsoft.Json
,因为这将是一个不需要的依赖项。我有以下C#类作为反序列化目标:
public class PrintJob {
public bool PrintWeekends = true;
public int NumberOfCopies = 2;
}
但是根据数据合同,发件人可能也会发送null
值来表明使用了虚假值:
{PrintWeekends: null, NumberOfCopies: null}
相当于
{PrintWeekends: false, NumberOfCopies: 0}
这种奇怪的数据合同无法轻易改变。当然,所选的反序列化器默认不会忽略null
,并抛出错误:
System.InvalidOperationException:
在iinen Werttyp konvertiert werden的NULL kann nicht。bei System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain(Object o,Type type,JavaScriptSerializer serializer,Boolean throwOnError,Object&amp; convertedObject)
bei System.Web.Script.Serialization.ObjectConverter.AssignToPropertyOrField(Object propertyValue,Object o,String memberName,JavaScriptSerializer serializer,Boolean throwOnError) ...
我可以修改反序列化器以满足所需的数据合同吗?如果是,那么如何?
答案 0 :(得分:2)
简单地将契约变量设为可为空的类型,这也允许来自用户的空值,然后您可以将它们视为默认值
public class PrintJob {
public bool? PrintWeekends = true;
public int? NumberOfCopies = 2;
}