我正在使用fastJSON,我遇到了一个问题。我不能接受JSON字符串并将其转换为对象集合。
我以为它能处理这件事,但也许我做错了或者误解了。
处理对象的多态集合
下面是我在一个C# cmd行应用程序中所做的一个例子(只需下载.cs文件并添加到一个项目中,然后复制下面的代码进行测试)。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<Class1> store = new List<Class1>();
for (int i = 0; i < 3; i++)
{
Class1 c = new Class1();
c.Name = "test";
c.Start = DateTime.Now;
store.Add(c);
}
string jsonResult = fastJSON.JSON.Instance.ToJSON(store);
List<Class1> backToObject = fastJSON.JSON.Instance.
ToObject<List<Class1>>(jsonResult);
}
}
public class Class1
{
public string Name { get; set; }
public DateTime Start { get; set; }
}
}backToObject总是空的。
我使用fastJSON是因为我需要一些实际上不依赖于.NET库的东西,而且我使用的是单机器人(可能稍后是单调的),而且在可以使用和不能使用的方面非常挑剔。
例如,我不能使用Json.net库(我认为有一个用于单机器人库,但当我执行iPhone部分时,我试图使代码可重用)。
发布于 2011-08-11 14:22:01
不应该使用ToObject来反序列化数组。相反,您应该使用Parse方法来解析JSON。
当使用ToObject时,您假设在JSON中有一个对象的实例正在反序列化(而不是数组或标量值),使用Parse,它将处理序列化为JSON的任何类型并返回适当的类型。
在本例中,调用Parse并将jsonResult传递给它将返回一个包含以下三个实例的ArrayList:
ArrayList arrayList = fastJSON.JSON.Instance.parse(jsonResult) as ArrayList;问题在于,现在您有一个ArrayList,它包含许多Dictionary<string, object>实例,这些实例将标量值(或其他Dictionary<string, object>实例,在引用的情况下)映射到属性名称。
我会把它归类为窃听器。我希望数组的解析能够正确地处理这个问题。
您可以修改ParseArray的代码,以便在调用array.Add时嗅探该类型。
这仍然会给返回字符串的ParseNumber (可能会被调用)留下一个问题。这可能会影响你,也可能不会影响你。
我会像在CodePlex项目站点上使用问题跟踪器提交问题一样做任何你需要的改变。
发布于 2014-06-08 08:51:48
注意,从fastJSON 2.x开始,OP代码基本上可以正常工作(注意语法略有变化)。
List<Class1> wallets = JSON.ToObject<List<Class1>>(json);https://stackoverflow.com/questions/7017214
复制相似问题