使用json.net JsonConverter序列化/ derserialize数据集时出错

时间:2016-02-08 22:16:33

标签: c# json serialization json.net bson

我正在使用Jsonconverter来序列化和反序列化数据集。一切正常,除非其中一个表具有可空的uniqueidentifier列。所以,如果我像我的数据集一样

var set = new DataSet();
var adapter = newSqlDataAdapter();
adapter.SelectCommand = new SqlCommand("Select * from mytable");
adapter.Fill(set);

其中mytable有一个可以为空的uniqueidentifer列,前几个值为null,然后序列化

MemoryStream ms = new MemoryStream();
using (BsonWriter bw = new BsonWriter(ms))
{
    JsonSerializer serializer = new JsonSerializer();
    serializer.Serialize(bw, set);
}
string bson = Convert.ToBase64String(ms.ToArray());

其中bson是数据集的字符串表示,一切似乎都很好。但是当我尝试反序化集合

byte[] data = Convert.FromBase64String(bson);
MemoryStream ms2 = new MemoryStream(data);
using (BsonReader reader = new BsonReader(ms2))
{
    reader.ReadRootValueAsArray = false;
    JsonSerializer serializer = new JsonSerializer();
    DataSet set2 = serializer.Deserialize<DataSet>(reader);
}

第一次尝试写入其他值为null的值时抛出异常。异常消息是将值a6934b26-3757-469a-9735-41558e4c0985转换为类型'System.String'时出错。路径'表[13] .MyNullableGuidColumn'。

作为一种解决方法,我已经在表中循环,将空值更改为guid.empty,但这似乎不是最好的答案。

那么是否有人知道如何使反序列化工作并将空值保持为空?

1 个答案:

答案 0 :(得分:1)

在序列化数据时尝试使用此技术:

string correctData = JsonConvert.SerializeObject(set, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });

如果您需要更多信息: http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_NullValueHandling.htm