如何在C#中反序列化JSON



我想从restful web服务中检索数据,以便将这些数据保存到object中。数据检索原则上是有效的,JSON字符串可以显示在文本框中。然而,我很难在C#中使用数据——经过一些研究和自己的编程,我在deserialising时仍然会遇到无法修复的错误:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Newtonsoft;
using System.IO;
using System.Net;
namespace Datenbankabfrage
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnGet_Click(object sender, EventArgs e)
{
// Create a request for the URL. 
WebRequest request = WebRequest.Create(
"URL");
// Get the response.
WebResponse response = request.GetResponse();
// Get the stream containing content returned by the server.
Stream dataStream = response.GetResponseStream();
// Open the stream using a StreamReader for easy access.
StreamReader reader = new StreamReader(dataStream);
// Read the content.
string responseFromServer = reader.ReadToEnd();
Artikel ErsterA = new Artikel();
Newtonsoft.Json.JsonConvert.PopulateObject(responseFromServer, ErsterA);
//txtAusgabeAA.Text = responseFromServer;
reader.Close();
response.Close();
}
}
}

这里有一张错误消息的图片,上面写着:

类型的未处理异常"Newtonsoft。Json。中发生JsonSerializationException `Newtonsoft。Json.dll

附加信息:无法将JSON数组填充到类型'Datenbankabfrage。Artikel’。路径",第1行,位置1。

如有任何帮助,我们将不胜感激!

异常消息解释了您的问题:

无法将JSON数组填充到类型"Datenbankabfrage"中。Artikel’。路径",第1行,位置1。

对于后台,JSON有两种类型的容器:

  • 数组是值的有序集合。数组以[(左括号)开始,以](右括号)结束。值用,(逗号)分隔。

    Json。NET映射。NET IEnumerable、Lists和Arrays(字典除外)转换为JSON数组。

  • 对象是一组无序的名称/值对。对象以{(左大括号)开始,以}(右大括号)结束。

    Json。NET映射不可枚举。NET对象,例如Artikel到JSON对象。

因此,从异常情况来看,JSON字符串中的根容器(不包括在问题中)一定是一个数组,因此不能用JsonConvert.PopulateObject()填充到预先存在的不可枚举POCO中。

相反,JSON需要反序列化如下:

var list = JsonConvert.DeserializeObject<List<Artikel>>(responseFromServer);

相关内容

  • 没有找到相关文章

最新更新