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); 
    } 
+0

不要离开这个答案,因为不清楚你想解决的问题*是否需要* JSON。一种选择是使用C#中内置的XML序列化器。 如果需要JSON,Newtonsoft库支持'DataTable'的[de]序列化。 – Tor

声明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,但它是用于我们的测试项目。谢谢,设置工作正常。 –