我正在使用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,但这似乎不是最好的答案。
那么是否有人知道如何使反序列化工作并将空值保持为空?
答案 0 :(得分:1)
在序列化数据时尝试使用此技术:
string correctData = JsonConvert.SerializeObject(set, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
如果您需要更多信息: http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_NullValueHandling.htm