JSon内容反序列化DataTable错误解析DataType
问题描述:
我有一个webapi返回json序列化的DataTable结果集,在客户端,当我尝试反序列化相同时,列的值将从float转换为int。任何人都可以建议我如何解决这个问题。我经历了很多帖子,但没有找到工作解决方案。JSon内容反序列化DataTable错误解析DataType
下面是使用控制台应用程序重现问题的示例代码片段。
string jsonString = "[{\"Column1\":1.0,\"Column2\":0.0,\"Column3\":1.0}]";
DataTable dt= JsonConvert.DeserializeObject<DataTable>(jsonString);
现在访问dt.Rows [0] [0]将返回1而不是1.0。
如果有任何其他建议以不同的方式从WebApi传递数据表也是可以接受的。下面是Web API代码片断
[HttpPost]
public IHttpActionResult GetData(string some parameters)
{
DataTable dt = new DataTable(); //some datatable
Ok(dt);
}
答
声明JSON序列的设置来处理花车......
string jsonString = "[{\"Column1\":1.0,\"Column2\":0.0,\"Column3\":1.0}]";
JsonSerializerSettings settings = new JsonSerializerSettings
{
FloatParseHandling = FloatParseHandling.Decimal
};
和deserialising时提供的设置...
var dt = JsonConvert.DeserializeObject<DataTable>(jsonString, settings);
我会补充说,以这种方式使用DataTable可能不是一个好主意 - 值得注意的是,源DataTable上的任何元数据(例如键和约束)在另一个解串行时将会丢失 结束。
+0
是的,不应该使用datatable,但它是用于我们的测试项目。谢谢,设置工作正常。 –
不要离开这个答案,因为不清楚你想解决的问题*是否需要* JSON。一种选择是使用C#中内置的XML序列化器。 如果需要JSON,Newtonsoft库支持'DataTable'的[de]序列化。 – Tor