【发布时间】:2017-06-15 17:30:28
【问题描述】:
我正在使用 Newtonsoft Json 转换器来序列化和反序列化对象,它对我的程序非常有用。
但是如果存储在对象中的任何值是 null/空,它们将被序列化为{},无法反序列化,我的程序将停止。
例如,如果我反序列化以下代码,一切正常:
{
"Thing1": 2,
"Thing2": false,
"Thing3": "string",
"Thing4": "2017-10-28T14:04:24.74"
}
但是如果我尝试反序列化以下代码:
{
"Thing1": {},
"Thing2": false,
"Thing3": "",
"Thing4": {}
}
Thing1 和 Thing4 在反序列化过程中都会引起问题。
不确定这是否与我从数据库中读取以进行序列化的方式有关:
var r = Serialize(myReader);
string json = JsonConvert.SerializeObject(r,
Formatting.Indented,
new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
});
public IEnumerable<Dictionary<string, object>> Serialize(SqlDataReader reader)
{
var results = new List<Dictionary<string, object>>();
var cols = new List<string>();
for (var i = 0; i < reader.FieldCount; i++)
cols.Add(reader.GetName(i));
while (reader.Read())
results.Add(SerializeRow(cols, reader));
return results;
}
private Dictionary<string, object> SerializeRow(IEnumerable<string> cols,
SqlDataReader reader)
{
var result = new Dictionary<string, object>();
foreach (var col in cols)
result.Add(col, reader[col]);
return result;
}
我用过:
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }
在我的反序列化器中:
BlankObject blnkObj = JsonConvert.DeserializeObject<BlankObject>(json, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
如何反序列化一个空值?提前致谢。
【问题讨论】:
-
它会导致什么“问题”,您的研究表明了什么?
-
每当反序列化一个空值时,我的程序就会出错。如果我注释掉 BlankObject 类中的空值(在本例中为 Thing1 和 Thing4),则反序列化将起作用。
int Thing1 { get; set; } -
问题是
"Thing1"的值有时是整数,有时是未知类型的对象。为此类属性创建DataColumn时,Json.NET 应该使用什么类型?如果您事先知道"Thing1"的正确类型,您可以创建自己的DataTableConverter版本,如here 所示。
标签: c# json serialization asp.net-core deserialization