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