У меня есть одна проблема. Я хочу прочитать данные JSON из моей локальной ссылки и поместить ее в класс объектов. Моя проблема в том, что объект [] не заполнял данными. Вот мой код:Ошибка заполнения массива объектов из данных JSON с использованием DataContractJsonSerializer
Это файл serverdata.cs с моим объектом внутри, что я хочу, чтобы заполнить:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.Serialization;
namespace Διαχείριση
{
class serverdata
{
public προμηθευτέςRow[] Rows;
[DataContract(Name = "ΠρομηθευτέςResult")]
public struct προμηθευτέςRow
{
[DataMember(Name = "Κωδικός")]
public int Κωδικός { get; set; }
[DataMember(Name = "Όνομα")]
public string Όνομα { get; set; }
[DataMember(Name = "Επίθετο")]
public string Επίθετο { get; set; }
[DataMember(Name = "Τηλέφωνο")]
public string Τηλέφωνο { get; set; }
[DataMember(Name = "Διεύθυνση")]
public string Διεύθυνση { get; set; }
[DataMember(Name = "Mail")]
public string Mail { get; set; }
[DataMember(Name = "Προϊόντα")]
public string[] Προϊόντα { get; set; }
}
}
}
Тогда я в Form.cs, которые я хочу прочитать данные в формате JSON от моего локальный сервер:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.Serialization.Json;
namespace Διαχείριση
{
public partial class Administator_Form : Form
{
serverdata ServerData;
public Administator_Form()
{
ServerData = new serverdata();
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
WebRequest request = WebRequest.Create(string.Format("mylocallink"));
WebResponse response = request.GetResponse();
Stream stream = request.GetResponse().GetResponseStream();
StreamReader sread = new StreamReader(stream);
//string sLine = sread.ReadLine();
//MessageBox.Show(sLine);
DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(List<serverdata.προμηθευτέςRow>));
var result = (List<serverdata.προμηθευτέςRow>)json.ReadObject(stream);
ServerData.Rows = result.ToArray();
}
}
}
Теперь, если я позвоню к примеру MessageBox.Show(ServerData.Rows[0].Κωδικός.ToString());
я получаю исключение:
"An unhandled exception of type 'System.IndexOutOfRangeException' occurred in Project.exe
Additional information: Index was outside the bounds of the array."
Так что моя проблема в том, что result
не заполнил ServerData.Rows
.
Вот данные JSON:
{
"ΠρομηθευτέςResult": [
{
"Mail": "mail1",
"Όνομα": "name1",
"Διεύθυνση": "address1",
"Επίθετο": "epitheto1",
"Κωδικός": 1,
"Προϊόντα": [
"subproduct1.1",
"subproduct1.2"
],
"Τηλέφωνο": "1111111111"
},
{
"Mail": "mail2",
"Όνομα": "name2",
"Διεύθυνση": "address2",
"Επίθετο": "epitheto2",
"Κωδικός": 2,
"Προϊόντα": [
"subproduct2.1",
"subproduct2.2"
],
"Τηλέφωνο": "2222222222"
}
]
}
Вместо того, чтобы публиковать jpg-изображение какой-либо интерпретации JSON какого-то зрителя, можете ли вы поместить фактический JSON в свой вопрос в виде текста? Это облегчило бы нам помощь вам. –
{"ΠρομηθευτέςResult": [{"Mail": "mail1", "Όνομα": "name1", "Διεύθυνση": "address1", "Επίθετο": "epitheto1", "Κωδικός": 1, "Προϊόντα": [ "subproduct1.1", "subproduct1.2"], "Τηλέφωνο": "1111111111"}, { "Почта": "mail2", "Όνομα": "имя2", "Διεύθυνση": "адрес2", "Επίθετο ":" epitheto2 "," Κωδικός ": 2," Προϊόντα ": [" subproduct2.1 "," subproduct2.2 "]," Tηλέφωνο ":" 2222222222 "}]} – Achill
Спасибо за добавление JSON. Я добавил ответ, который, я надеюсь, будет вам полезен. –