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部分时).
请注意,从fastJSON 2.x开始,OP代码基本上可以正常工作(注意语法稍有改变).
List<Class1> wallets = JSON.ToObject<List<Class1>>(json);
Run Code Online (Sandbox Code Playgroud)
您不应该使用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 项目站点上的问题跟踪器提交问题。
| 归档时间: |
|
| 查看次数: |
12545 次 |
| 最近记录: |