Json Json serializationexception与简单的字符串



我的数据源创建了一个JSON,表示整数数组为"1,2,3,4,5"。我对此无能为力(比如把它改成[1,2,3,4,5]),这是一个企业CMS,我们只能处理。

我正在尝试阅读newtonsoft ToObject方法如何处理以下代码:

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

我得到Newtonsoft.Json.JsonSerializationException。无法从系统强制转换或转换。字符串到System.Collections.Generic.List ' 1[System.String]。我完全理解这一点,但我想知道Newtonsoft JSON库是否有一种内置的方式来从逗号分隔的字符串转换为列表。

我想有一个更好的方法,而不是试图检查变量是否为逗号分隔的列表,然后将其手动转换为列表<>,或者可能是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. 您应该使用JArray而不是JValue。你想让它成为一个数组,所以你需要使用Newtonsoft中的等价类来表示一个数组。(据我所知,A JValue代表一种简单类型——例如:string, number, Date等)
  2. 你应该使用Parse方法而不是使用构造函数。Parse将读取字符串的内容作为一个数组,但是…
  3. …为了做到这一点,您需要用方括号包围您获得的数据,否则JArray将无法正确解析数据。没有必要摆弄CMS;在你解析之前做一个字符串连接。

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

相关内容

  • 没有找到相关文章

最新更新