Как динамически десериализовать Json String

В моем случае я начал работать с открытием Application Loader внутри XCode.

Шаги: XCode -> Открыть инструмент разработчика -> Application Loader

Когда я открыл его с помощью Launchpad не удалось определить правильную учетную запись для приложения. Поэтому он попросил меня создать учетную запись.

С помощью XCode Application Loader может отображать список учетных записей, на которые я имею право. Вы должны выбрать правильную учетную запись из раскрывающегося списка.

0
задан ruedi 16 January 2019 в 09:17
поделиться

2 ответа

Почему вы используете StreamReader для чтения данных JSON?

вы можете использовать JObject для анализа вашего json и получения данных из него.

var json = @"{""data"":[""4482359"",""12526"",""5"",""5"","""",""Yes, that is right"",""1""]}";
var obj = JObject.Parse(json);

List<string> lst = (obj["data"]).ToObject<List<string>>();

var result = JsonConvert.SerializeObject(lst);
0
ответ дан Derviş Kayımbaşıoğlu 16 January 2019 в 09:17
поделиться

Предполагая, что это содержимое потока:

{"data":["4482359","12526","5","5","","Yes, that is right","1"]}
{"data":["2223446","65432","3","3","","Nope, that's not right","0"]}
(...)

вы можете десериализовать эти строки, используя List<class>. Примерно так:

using System.IO;
using Newtonsoft.Json;

public class RootObject
{
    public List<string> data { get; set; }
}

Потоковую передачу JSON можно десериализовать двумя простыми способами:

  • Если вам действительно не нужно анализировать поток построчно, прочитайте поток до конца, затем используйте JsonTextReader для чтения результирующей строки и JsonSerializer для десериализации результата считывателя в экземпляр класса, который вы используете в качестве контейнера для данных: [1116 ]

List<RootObject> dataObjects = new List<RootObject>();

using (StreamReader sr = new StreamReader(stream))
{
    var JSONObject = sr.ReadToEnd();
    var reader = new JsonTextReader(new StringReader(JSONObject)) { SupportMultipleContent = true };
    var serializer = new JsonSerializer();

    while (reader.Read()) {
        dataObjects.Add(serializer.Deserialize<RootObject>(reader));
    }
    reader.Close();
}

Версия VB.Net:

Imports System.IO
Imports Newtonsoft.Json

Public Class RootObject
    Public Property MyData As List(Of String)
End Class

Dim dataObjects As New List(Of RootObject)()
Using sr As New StreamReader(stream)
    Dim JSONObject As String = sr.ReadToEnd()

    Dim reader = New JsonTextReader(New StringReader(JSONObject)) With {
        .SupportMultipleContent = True
    }
    Dim serializer = New JsonSerializer()
    While reader.Read()
        dataObjects.Add(serializer.Deserialize(Of RootObject)(reader))
    End While
    reader.Close()
End Using
  • Если вам нужно проанализировать строку потока По строке по какой-то причине, не указанной здесь, вы можете вставить разделитель массива [ перед первой строкой и ] после последней строки, разделяя каждую строку знаком (запятая). Теперь у вас есть функциональный массив, который можно десериализовать с помощью JsonConvert.DeserializeObject<Object>(JSON)

Конечный продукт будет выглядеть следующим образом:

[ {"data":["value1","value2","value3", (...)]},
  {"data":["value1","value2","value3", (...)]} ]
[ 1125]

List<RootObject> dataObjects = new List<RootObject>();

using (StreamReader sr = new StreamReader(stream))
{
    var JSONObject = sr.ReadToEnd();
    dataObjects = JsonConvert.DeserializeObject<List<RootObject>>(JSONObject);
}

Версия VB.Net:

Dim dataObjects As New List(Of RootObject)()

Using sr As New StreamReader(stream)
    Dim JSONObject As String = sr.ReadToEnd()
    dataObjects = JsonConvert.DeserializeObject(Of List(Of RootObject))(JSONObject)
End Using
0
ответ дан Jimi 16 January 2019 в 09:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: