首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JsonFX反序列化POCO数组

使用JsonFX反序列化POCO数组
EN

Stack Overflow用户
提问于 2012-04-08 02:30:15
回答 4查看 2.1K关注 0票数 1

我想简单地从URL读取一些JSON数据,然后将其转换为POCO类的集合,但我似乎不知道我做错了什么。

下面是一个JSON数据示例,因为它是从URL获取的:

代码语言:javascript
复制
[
{
"Name":"Together As One Run",
"Location":"Parkville, MO",
"ScheduledAt":"\/Date(1334984400000)\/",
"URL":"http://www.runningintheusa.com/Race/View.aspx?RaceID=36667"
},
{
"Name":"Lean Green Running Machine 5K Run/Walk and 1 Mile Run",
"Location":"Springfield, MO",
"ScheduledAt":"\/Date(1335589200000)\/",
"URL":"http://www.runningintheusa.com/Race/View.aspx?RaceID=53945"
},
{
"Name":"Festival of Miles",
"Location":"St. Louis, MO",
"ScheduledAt":"\/Date(1338440400000)\/",
"URL":"http://www.runningintheusa.com/Race/View.aspx?RaceID=53901"
},
{
"Name":"Miles Against Melanoma",
"Location":"Saint Charles, MO",
"ScheduledAt":"\/Date(1338613200000)\/",
"URL":"http://www.runningintheusa.com/Race/View.aspx?RaceID=53939"
}
]

我可以用WebClient很好地获取这些数据。

我这样设置我的JsonFX阅读器:

代码语言:javascript
复制
var json = new JsonReader(new DataReaderSettings(new PocoResolverStrategy()));

这是我的POCO类:

代码语言:javascript
复制
public class Race {
  public String Name { get; set; }
  public String Location { get; set; }
  public DateTime ScheduledAt { get; set; }
  public String URL { get; set; }
}

我尝试过用几种方法对JSON数据进行反序列化,但似乎都不起作用:

代码语言:javascript
复制
//reader is an instance of StreamReader
var content = reader.ReadToEnd();
//nope
//var output = json.Read<Race>(content);
//nope
//var output = json.Read<Race[]>(content);

这必须是一件简单的事情,我就是找不到解决方案。我花了大约30分钟。谷歌搜索也无济于事。任何帮助都将不胜感激!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-08 02:48:41

我从来没有用过JsonFX,但是你可以试试Json.Net或者内置的JavaScriptSerializer。这两种方法都可以正常工作。

代码语言:javascript
复制
 var jObj1 = JsonConvert.DeserializeObject<Race[]>(jsonstr);
 var jobj2 = new JavaScriptSerializer().Deserialize<Race[]>(jsonstr);
票数 2
EN

Stack Overflow用户

发布于 2012-04-08 02:46:15

编辑哦,我没读标题。为什么要使用jsonfx?也许可以试着列个清单?

代码语言:javascript
复制
var output = json.Read<List<Race>>(input);

下面是一个有效的例子,说明了如何使用JSON.Net来完成这项工作。

你会想要使用JSON.NET,它比任何内置的类都要快,并且在序列化字典方面做得更好。

使用Nuget

> Install-Package Newtonsoft.Json

代码语言:javascript
复制
List<Race> deserializedRaces = JsonConvert.DeserializeObject<List<Race>>(jsonString);
票数 0
EN

Stack Overflow用户

发布于 2012-04-08 02:54:26

我敢打赌,您需要在自定义类型上指定datacontract和datamember属性,以便jsonFX识别它。

代码语言:javascript
复制
using System.Runtime.Serialization;
[DataContract]
public class Race {
  [DataMember]
  public String Name { get; set; }
  [DataMember]
  public String Location { get; set; }
  [DataMember]
  public DateTime ScheduledAt { get; set; }
  [DataMember]
  public String URL { get; set; }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10057165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档