2016-11-14 99 views
0

我的數據源創建表示整數數組的JSON爲「1,2,3,4,5」。我無法對此做任何事情(如將其更改爲[1,2,3,4,5]),這是我們必須處理的企業CMS。簡單字符串的Newtonsoft Json JsonSerializationException

我想在newtonsoft ToObject方法如何處理下面的代碼閱讀起來:

JValue theValue = new JValue("1,2,3") 
List<int> x = theValue.ToObject<List<int>>(); 

我得到一個Newtonsoft.Json.JsonSerializationException。無法強制轉換或從System.String轉換爲System.Collections.Generic.List`1 [System.String]。我完全理解這一點,但我想知道Newtonsoft JSON庫是否有內置的方式將逗號分隔的字符串轉換爲List。

我想有一個比試圖檢查變量是否是逗號分隔列表更好的方法,然後將其手動轉換爲列表<>或者可能是JArray,但我錯了之前!

編輯

我想分享我的解決方案:

dynamic theValue = new JValue("1,2,3,4"); /// This is just passed in, i'm not doing this on purpose. Its to demo. 

if (info.PropertyType == typeof (List<int>)) 
{ 
    if (info.CanWrite) 
    { 
     if (theValue.GetType() == typeof (JValue) && theValue.Value is string) 
     { 
      theValue = JArray.Parse("[" + theValue.Value + "]"); 
     } 

     info.SetValue(this, theValue.ToObject<List<int>>()); 
    } 
} else { 
// do other things 

回答

1

你必須從我所看到的三個問題:

  1. 您應該使用JArrayJValue。你打算這是一組東西,所以你需要使用Newtonsoft中的等價類來表示一個數組。 (A JValue,盡我可以告訴,表示簡單的類型 - e.g stringnumberDate等)
  2. 您應該使用Parse方法與使用構造。 Parse將讀取字符串的內容作爲一個數組,但是...
  3. ...爲了做到這一點,你將需要圍繞你用方括號或JArray得到的數據不能正確解析數據。沒有必要擺弄CMS;在解析之前只需要一個字符串concat。

例如

JArray theValue = JArray.Parse("[" + "1,2,3" + "]"); 
+0

這確實解決了這個問題。我相信輕微的字符串操作是可以接受的解決方案,特別是當我知道我期望的類型是逗號分隔的整數列表時,我想要的類型是列表。另外,僅供參考,JValue是Newtonsoft在嘗試反序列化「1,2,3,4,5」時提供給我的。我只是編寫代碼來向你展示我的問題。感謝您的快速解決方法! – CarComp