【问题标题】:Convert json string to .net object array将 json 字符串转换为 .net 对象数组
【发布时间】:2016-01-11 18:10:00
【问题描述】:

我正在尝试转换一个 json 字符串(内容)响应

使用

解析成 Attachment [] 对象
Attachment attachment = JsonConvert.DeserializeObject<Attachment>(content);

问题:如何把它变成一个Attachment []对象数组?

【问题讨论】:

  • 你的问题是什么?
  • 然后呢?它奏效了吗?不是吗?如果不是,那是什么错误?
  • 它不工作。如何将其转换为 Attachment [] 对象数组?
  • json2csharp.com 这个站点会为你生成一个合适的 C# 类。

标签: c# .net json parsing


【解决方案1】:

您的Attachment 对象并未完全反映响应的数据结构。创建一个 AttachmentCollection 以包含附件数组:

public class AttachmentCollection
{
    public List<Attachment> Attachment { get; set; }
}

然后反序列化为AttachmentCollection:

var attachments = JsonConvert.DeserializeObject<AttachmentCollection>(content);

【讨论】:

  • 能不能把这个转成IEnumerable,让WebApi可以传递内容。
  • 您能详细说明一下吗?您是否尝试在响应中返回此数据?
  • 是的,因为我从另一个 Web 服务获取该 json 并希望对其进行解析,然后将其作为 json 响应重新发送,以便可以使用 Angularjs 读取它
  • 在这种情况下,没有必要区分 List/IEnumerable。 JSON 序列化程序会将两者都转换为 JSON 数组。
  • 获取内容 = client.DownloadString(url);
【解决方案2】:

您也可以使用 list(Collection)。

public class RootObject
{
    public List<Attachment> Attachment { get; set; }
}

【讨论】:

  • 关于列表的好点——回想起来,我认为 JsonConvert 需要一个具体类型而不是 IEnumerable。
【解决方案3】:

你可以使用 JSON.Net

您需要做的是首先获取 JSONArray 并为 JSON Array 中的每个 JSONObject 执行一个 for 语句。在 for 语句中,您可以使用 Linq 创建自定义附件类的列表。见下文:

List<Attachment> AttachmentList = new List<Attachment>();
JArray a = JArray.Parse(jsonString);

foreach (JObject o in a.Children<JObject>())
{
    Attachment newAttachment = new Attachment
    {
       WriteUpID = (int)o["WriteUpID"],
       InitialScanID = (int)o["InitialScanID"],
       //etc, do this for all Class items. 
    }
    AttachmentList.Add(newAttachment);
}
//Then change the AttachmentList to an array when you're done adding Attachments
Attachment[] attachmentArray = AttachmentList.ToArray();  

【讨论】:

  • [JsonReaderException:从 JsonReader 读取 JArray 时出错。当前 JsonReader 项不是数组:StartObject。路径'',第 1 行,位置 1。]
猜你喜欢
  • 2013-08-29
  • 2012-05-08
  • 1970-01-01
  • 1970-01-01
  • 2013-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-05
相关资源
最近更新 更多