2016-05-14 153 views
-1

我有一個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

回答

0

聲明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,但它是用於我們的測試項目。謝謝,設置工作正常。 –