我正在使用 Newtonsoft JSON 使用下面的代码将 DataSet 序列化为二进制 JSON。反序列化回 DataSet 时,字段类型从 Decimal 变为 Double?有人知道出了什么问题吗?
示例代码:
static void Main(string[] args)
{
var ds = new DataSet();
var dt = ds.Tables.Add();
dt.Columns.Add("Test", typeof(Decimal));
dt.Rows.Add(new object[] { 1.23345M });
var data = DataSetToBinJSON(ds);
var ds2 = BinJSONToDataSet(data);
Console.WriteLine((ds2.Tables[0].Columns[0].DataType == typeof(Decimal)) ? "Passed" : string.Format("Failed- {0}", ds2.Tables[0].Columns[0].DataType));
Console.ReadLine();
}
/// <summary>
/// Utility function to create an optimized Binary JSON version of a DataSet
/// </summary>
public static byte[] DataSetToBinJSON(DataSet dataSet)
{
if (dataSet == null || dataSet.Tables == null || dataSet.Tables.Count == 0)
{
return null;
}
using (var ms = new MemoryStream())
{
using (var writer = new BsonWriter(ms))
{
var serializer = new JsonSerializer();
serializer.Serialize(writer, dataSet);
return ms.ToArray();
}
}
}
/// <summary>
/// Utility function to deserialize an optimized Binary JSON serialized DataSet
/// </summary>
public static DataSet BinJSONToDataSet(byte[] dataBytes)
{
if (dataBytes.Length == 0)
{
return null;
}
using (var ms = new MemoryStream(dataBytes))
{
using (var reader = new BsonReader(ms))
{
var serializer = new JsonSerializer();
return serializer.Deserialize<DataSet>(reader);
}
}
}