0

我想从一个宁静的Web服务中检索数据,以便将这些数据保存到object中。数据检索原则上可用,JSON字符串可以显示在文本框中。但是,我很难使数据可在C#中 - 一些研究和自己的节目后,我仍然得到错误,当deserialising,我不能够解决:如何反序列化C#中的JSON

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(); 
     } 
    } 
} 

Here a picture of the error massage,其中规定:

型“Newtonsoft.Json.JsonSerializationException`的未处理的异常出现在 Newtonsoft.Json.dll

其他信息:无法填充JSON数组到 类型'Datenbankabfrage.Artikel'。路径”,1号线,位置1

任何帮助表示赞赏

+0

你什么错误?更新那个信息的问题。如果我们不知道您遇到什么错误,那么没有办法提供帮助。 – Nkosi

+0

如何使用'Artikel ErsterA = Newtonsoft.Json.JsonConvert.DesrializeObject (responseFromServer)'而不是因为'ErsterA'没有在手边填充。 – Nkosi

回答

1

你的问题是由异常消息解释:

不能填充JSON数组到类型‘Datenbankabfrage.Artikel’ 。路径 ”,第1行,位置1

对于背景,JSON具有两种类型的容器:

  • 数组是值的有序集合。一个数组以[(左括号)开头并以](右括号)结尾。值由,(逗号)分隔。

    Json.NET maps .NET IEnumerable,列表和数组(不包括字典)到JSON数组。

  • 一个对象是一组无名称/值对。一个对象以{(左大括号)开头,以}(右大括号)结尾。

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

因此从异常它必须是在你的JSON字符串(不包括在您的问题)的根容器是一个数组,并且因此不能被填充到预先存在的不可枚举POCO与JsonConvert.PopulateObject()

相反,JSON需要按照如下方式反序列化:

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

嗨,dbc非常感谢!!!!它现在工作正常!:) – MS4IM