我的数据源创建了一个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
在我看来,你有三个问题:
- 您应该使用
JArray
而不是JValue
。你想让它成为一个数组,所以你需要使用Newtonsoft中的等价类来表示一个数组。(据我所知,AJValue
代表一种简单类型——例如:string
,number
,Date
等) 你应该使用 - …为了做到这一点,您需要用方括号包围您获得的数据,否则JArray将无法正确解析数据。没有必要摆弄CMS;在你解析之前做一个字符串连接。
Parse
方法而不是使用构造函数。Parse
将读取字符串的内容作为一个数组,但是…。
JArray theValue = JArray.Parse("[" + "1,2,3" + "]");