使用C#反序列化JSON文件

5

我的问题是我有一个JSON文件:

我需要把它保存在列表中,但是当我尝试打印列表的第一个元素时,会出现System.ArgumentOutOfRangeException的错误,就像我的列表为空一样。以下是我的代码:

JavaScriptSerializer ser = new JavaScriptSerializer();            
        Causali o = new Causali();
        List<CausaliList> lista = new List<CausaliList>();
        WebRequest causali = (HttpWebRequest)WebRequest.Create("http://trackrest.cgestmobile.it/causali");
        WebResponse risposta = (HttpWebResponse)CreateCausaliRequest(causali).GetResponse();
        Stream data = risposta.GetResponseStream();
        StreamReader Leggi = new StreamReader(data);            
        string output = Leggi.ReadToEnd();
        lista = ser.Deserialize<List<CausaliList>>(output);
        lst2.Items.Add(lista[0]);

这是我的两个用于保存的类:

class Causali
    {
        public int id;
        public string causaliname;
        public string identificationcode;
        public string expired;
    }   

并且

class CausaliList
    {
        public Causali causali;       
    }

你能帮我解决这个问题吗?


2
你的代码在哪里? - geminiousgoel
你能在“Deserialize”调用之前提供“output”的值示例吗?(在“Deserialize”行上设置断点并在它停止时获取“output”的内容) - Jens Meinecke
嗨,你的代码很好。你能否请发布一下你反序列化的Json字符串! - Wheels73
输出具有以下值:{"causali":[{"id":1,"causaliname":"PERMESSI","identificationcode":"PR","expired":"2050-12-31"},{"id":2,"causaliname":"INFORTUNIO","identificationcode":"IN","expired":"2050-12-31"},{"id":3,"causaliname":"PERMESSO ESAMI","identificationcode":"PE","expired":"2050-12-31"}]} - Lorenzo Valenti
2个回答

2

要在C#中反序列化代码: 假设您有一个名为getContent的变量中的数据,那么您可以使用以下方法:

dynamic getDesearilize = JsonConvert.DeserializeObject(getContent);

2

请将以下内容作为您的根对象尝试:

public class CausaliList
{
    public List<Causali> causali { get; set; }
}

然后像这样反序列化您的对象:

lista = ser.Deserialize<CausaliList>(output); 

最终,您可以像这样访问列表:
lst2.Items.Add(lista.causali[0]);

注意:我强烈建议使用json.NET。

这不起作用,我的列表仍然没有元素,我不知道为什么。 - Lorenzo Valenti
亲爱的@LorenzoValenti,请发布您的输出。谢谢。 - Mohammad
很高兴我能帮到你。 - Mohammad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接