如何使用FastJson从Json字符串转到Object Collection

cho*_*bo2 7 .net c# json fastjson

我正在使用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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

backToObject 永远是空的.

我使用的是fastJSON,因为我需要的东西真的没有依赖于.NET库,而且我使用的是monodroid(可能是后来的monotouch),它在你可以使用和不能使用的东西中非常挑剔.

例如,我不能使用Json.net库(我认为有一个用于monodroid,但我试图让我的代码可以重复使用,当我做iPhone部分时).

ste*_*ook 5

请注意,从fastJSON 2.x开始,OP代码基本上可以正常工作(注意语法稍有改变).

List<Class1> wallets = JSON.ToObject<List<Class1>>(json);
Run Code Online (Sandbox Code Playgroud)


cas*_*One 4

您不应该使用ToObject反序列化数组。相反,您应该使用该Parse方法来解析 JSON。

使用 时ToObject,您假设您有一个正在反序列化的 JSON 对象实例(不是数组或标量值),使用 时,Parse它将处理序列化为 JSON 的任何类型并返回适当的类型。

在这种情况下,调用Parse并传递jsonResult给它将返回一个ArrayList包含三个实例的:

ArrayList arrayList = fastJSON.JSON.Instance.parse(jsonResult) as ArrayList;
Run Code Online (Sandbox Code Playgroud)

问题在于,现在您有一个ArrayList包含许多实例的Dictionary<string, object>实例,这些实例的标量值(或其他Dictionary<string, object>实例,在引用的情况下)映射到属性名称。

我将其归类为错误。我希望数组的解析能够正确处理这个问题。

您可以修改代码以ParseArray在调用时嗅探类型array.Add

ParseNumber这仍然留下了返回字符串(可能会被调用)的问题。这可能会也可能不会影响您。

我会进行您需要的任何更改,并通过 CodePlex 项目站点上的问题跟踪器提交问题