无法将json反序列化为C#

时间:2014-11-28 03:14:27

标签: c# json

我有一个我正在尝试反序列化的示例,当我尝试提取数据时,我遇到了一堆不同的错误。我想要的只是提取id值,但我似乎无法弄明白。

{"object":"payments","entry":[{"id":"546787862118679","time":1417135022,"changed_fields":["actions"]}]}

    public class Entry
    {
        public string id { get; set; }
        public int time { get; set; }
        public List<string> changed_fields { get; set; }
    }

    public class RootObject
    {
        public string @object { get; set; }
        public List<Entry> entry { get; set; }
    }

    dynamic result = new StreamReader(request.InputStream).ReadToEnd();
    var items = JsonConvert.DeserializeObject<RootObject>(result);
    string paymentID = items.entry.FirstorDefault().id;

返回此错误:

  

'System.Collections.Generic.List'不包含'FirstOrDefault()'的定义

6 个答案:

答案 0 :(得分:3)

我觉得如果您的代码可以使用

string paymentID = items.entry.FirstorDefault().id;

string paymentID = items.entry.FirstOrDefault().id;

而且你的错误实际上是

'System.Collections.Generic.List' does not contain a definition for 'FirstorDefault'

由于Collections.Generic.List 包含FirstOrDefaultSystem.Linq)的定义

答案 1 :(得分:2)

试试这个

string paymentID = (items.entry.FirstOrDefault()).id;

从列表entry获取第一项,然后从该项中获取id

答案 2 :(得分:1)

从快速查看您获得的错误,它出现在这一行:

string paymentID = items.entry.FirstorDefault().id; //should be .FirstOrDefault().id;

...枚举Entryitems.entry的每个List<Entry>if (items.entry != null && items.entry.Count > 0) { foreach(Entry entryItem in items.entry) { if (!string.IsNullOrEmpty(entryItem.id)) { string paymentID = entryItem.id; } } }

Entry

...仅访问第一个if (items.entry != null && items.entry.Count > 0) { if (!string.IsNullOrEmpty(items.entry[0].id)) { string paymentID = items.entry[0].id; } } 项目:

{{1}}

答案 3 :(得分:1)

为什么要将结果加载到动态类型中???使用字符串。

void Main()
{
    string json = @"{""object"":""payments"",""entry"":[{""id"":""546787862118679"",""time"":1417135022,""changed_fields"":[""actions""]}]}";

    Root root = JsonConvert.DeserializeObject<Root>(json);

    Entry entry = root.Entry.FirstOrDefault();
}


public class Entry
{

    [JsonProperty("id")]
    public string Id { get; set; }

    [JsonProperty("time")]
    public int Time { get; set; }

    [JsonProperty("changed_fields")]
    public string[] ChangedFields { get; set; }
}

public class Root
{

    [JsonProperty("object")]
    public string Object { get; set; }

    [JsonProperty("entry")]
    public Entry[] Entry { get; set; }
}

答案 4 :(得分:1)

出于某种原因(我仍然不知道为什么),当您将结果类型从动态更改为字符串时,您的代码将起作用。

string result = new StreamReader(request.InputStream).ReadToEnd();
if (!string.IsNullOrWhiteSpace(result)) {
    var items = JsonConvert.DeserializeObject<RootObject>(result);
    string paymentID = items.entry.FirstorDefault().id;
}

答案 5 :(得分:0)

这样做

string paymentID = (items.entry as List<Entry>).FirstOrDefault().id;