【问题标题】:Error when using json.net JsonConverter to serialize/derserialize a dataset使用 json.net JsonConverter 序列化/反序列化数据集时出错
【发布时间】:2016-05-18 18:01:54
【问题描述】:

我正在使用 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);
}

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

作为一种解决方法,我遍历了表格,将空值更改为 guid.empty,但这似乎不是最佳答案。

那么有人知道一种使反序列化工作并将空值保持为空的方法吗?

【问题讨论】:

标签: c# json serialization json.net bson


【解决方案1】:

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

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

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

【讨论】:

  • 这样做不会再引发异常,但会重新排序列。我还是会接受的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多