我有一个我正在尝试反序列化的示例,当我尝试提取数据时,我遇到了一堆不同的错误。我想要的只是提取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()'的定义
答案 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 包含FirstOrDefault
(System.Linq
)的定义
答案 1 :(得分:2)
试试这个
string paymentID = (items.entry.FirstOrDefault()).id;
从列表entry
获取第一项,然后从该项中获取id
。
答案 2 :(得分:1)
从快速查看您获得的错误,它出现在这一行:
string paymentID = items.entry.FirstorDefault().id; //should be .FirstOrDefault().id;
...枚举Entry
中items.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;