Web services 如何在C中反序列化JSON#

Web services 如何在C中反序列化JSON#,web-services,json.net,deserialization,json-deserialization,Web Services,Json.net,Deserialization,Json Deserialization,我想从restful web服务中检索数据,以便将此数据保存到对象中。数据检索基本上是工作的,JSON字符串可以显示在文本框中。然而,我很难让数据在C#中可用-经过一些研究和自己的编程,我在反序列化时仍然会遇到错误,我无法修复: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq

我想从restful web服务中检索数据,以便将此数据保存到
对象中。数据检索基本上是工作的,JSON字符串可以显示在文本框中。然而,我很难让数据在C#中可用-经过一些研究和自己的编程,我在反序列化时仍然会遇到错误,我无法修复:

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数组填充到类型 “Datenbankabbrage.Artikel”。“路径”,第1行,位置1


非常感谢您的帮助!

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

无法将JSON数组填充到类型“Datenbankabfrage.Artikel”上。路径 “,第1行,位置1

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

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

    Json.NET.NET IEnumerable、列表和数组(字典除外)到Json数组

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

    Json.NET不可枚举的.NET对象,如您的
    Artikel
    到Json对象

因此,从例外情况来看,JSON字符串中的根容器(不包括在您的问题中)必须是一个数组,因此不能用数组填充到预先存在的不可枚举POCO上

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

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

您会遇到什么错误?更新该信息的问题。如果我们不知道您遇到了什么错误,就没有办法提供帮助。不如改用
Artikel-ErsterA=Newtonsoft.Json.JsonConvert.DesrializeObject(responseFromServer)
,因为
ErsterA
不是事先填充的。