将 json.net JsonConverter 用于 serialize/derserialize 数据集时出错
Error when using json.net JsonConverter to serialize/derserialize a dataset
我正在使用 Jsonconverter 序列化和反序列化数据集。一切正常,但 table 之一具有可为空的 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 是数据集的字符串表示形式,一切似乎都运行良好。但是当我尝试反序列化 set
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);
}
它在第一次尝试写入其他值为空的值时抛出异常。异常消息是将值 a6934b26-3757-469a-9735-41558e4c0985 转换为类型 'System.String' 时出错。路径 'Table[13].MyNullableGuidColumn'。
作为解决方法,我循环了 table 将空值更改为 guid.empty,但这似乎不是最佳答案。
那么有没有人知道使反序列化工作并将 null 保持为 null 的方法?
在序列化数据时尝试使用此技术:
string correctData = JsonConvert.SerializeObject(set, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
如果需要,请提供更多信息:
http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_NullValueHandling.htm
我正在使用 Jsonconverter 序列化和反序列化数据集。一切正常,但 table 之一具有可为空的 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 是数据集的字符串表示形式,一切似乎都运行良好。但是当我尝试反序列化 set
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);
}
它在第一次尝试写入其他值为空的值时抛出异常。异常消息是将值 a6934b26-3757-469a-9735-41558e4c0985 转换为类型 'System.String' 时出错。路径 'Table[13].MyNullableGuidColumn'。
作为解决方法,我循环了 table 将空值更改为 guid.empty,但这似乎不是最佳答案。
那么有没有人知道使反序列化工作并将 null 保持为 null 的方法?
在序列化数据时尝试使用此技术:
string correctData = JsonConvert.SerializeObject(set, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
如果需要,请提供更多信息: http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_NullValueHandling.htm