ListView中的“值不在预期范围内”异常

时间:2012-11-25 00:06:23

标签: c# windows-8 microsoft-metro

适用于Windows 8应用程序开发环境。

代码:

   var deserialized = JsonConvert.DeserializeObject<RootObject>(json);
   listView.ItemsSource = deserialized; // error

数据模型:

    public class C
    {
        public List<Y> programs { get; set; }
        public string name { get; set; }
        public int code { get; set; }
    }
    public class RootObject
    {
        public List<C> cs { get; set; }
        public string date { get; set; }
    }
    public class Y
    {
        public string category { get; set; }
        public string time { get; set; }
        public string name { get; set; }
    }

我该怎么办?我找不到解决方案。

2 个答案:

答案 0 :(得分:3)

ItemsSource正在寻找IEnumerable,但您在RootObject中提供了一个对象。如果在代码中创建一个RootObject实例并尝试相同的赋值,则会得到相同的错误。

列表中应该显示什么?如果您只是将代码更改为:

listView.ItemsSource = deserialized.cs;

listView应显示您的C个对象。

答案 1 :(得分:0)

我总是很难弄清楚如何从串行器输出。我确实有我正在下面粘贴的工作代码(Windows 8商店)。它的作用非常明显。

                HttpResponseMessage responseGetEmailByPersonsBare =
                         await clientGetEmailByPersonsBare.PostAsync(UrlBase + EmailDetailGetEmailByPersonsBare, contentGetEmailByPersonsBare);
                     Stream myStream = await responseGetEmailByPersonsBare.Content.ReadAsStreamAsync();
                     var djsGetEmailByPersonsBare = new DataContractJsonSerializer(typeof(AEWebDataStructures.RootObjectEmailDetail));

                     var rootObjectEmailDetail = (AEWebDataStructures.RootObjectEmailDetail)djsGetEmailByPersonsBare.ReadObject(myStream);
                     responseGetEmailByPersonsBare.EnsureSuccessStatusCode();
                     returnTaskInfo.EmailDetails = rootObjectEmailDetail.Data;
                     returnTaskInfo.StatusReturn = AEWebDataStructures.StatusReturn.Success;