Разделить несколько JSON-данные в JSON формат файла, как объекта, так и в виде массива
Привет,
Как получить данные из JSON-файла, содержащего несколько строк данных? В настоящее время то, что я пытаюсь сделать, можно описать в разделе "Что я пробовал"
Ниже приведены примерные данные:-
[{ "DataType": "Spectre_DT", "HostName": "spectrum", "Listener": "c", "Timestamp": "2016-12-8T13:54:12+08:00", "Duration": "0.000086712" }, { "DataType": "Spectre_DT", "HostName": "spectrum", "Listener": "3", "Timestamp": "2016-12-8T13:54:12+08:00", "Duration": "0.0" }, { "DataType": "Spectre_DT", "HostName": "spectrum", "Listener": "a", "Timestamp": "2016-12-8T13:54:11+08:00", "Duration": "0.000100080" }, { "DataType": "Spectre_DT", "HostName": "spectrum", "Listener": "5", "Timestamp": "2016-12-8T13:54:10+08:00", "Duration": "0.0" }]
Когда я вхожу в datajson, я могу просмотреть свойства внутри объекта и увидеть все образцы данных. Но в настоящее время данные разделены правильно "Count = 4", но когда я шагаю внутрь count = 4, я вижу еще одно свойство данных 5. Что я хочу, так это получить каждый массив json с лямбда-разделением на разрыв. В результате в datajson array count он имеет значение ниже без десериализации в каждую переменную:
[0] {"DataType": "Spectre_DT","HostName": "spectrum","Listener": "c","Timestamp": "2016-12-8T13:54:12+08:00","Duration": "0.000086712"} [1] {"DataType": "Spectre_DT","HostName": "spectrum","Listener": "3","Timestamp": "2016-12-8T13:54:12+08:00","Duration": "0.0"} [2] {"DataType": "Spectre_DT","HostName": "spectrum","Listener": "a","Timestamp": "2016-12-8T13:54:11+08:00","Duration": "0.000100080"} [3] {"DataType": "Spectre_DT","HostName": "spectrum","Listener": "5","Timestamp": "2016-12-8T13:54:10+08:00","Duration": "0.0"}
Исходные данные представлены в следующем формате:-
{ "DataType": "Spectre_DT", "HostName": "spectrum", "Listener": "c", "Timestamp": "2016-12-8T13:54:12+08:00", "Duration": "0.000086712" } { "DataType": "Spectre_DT", "HostName": "spectrum", "Listener": "3", "Timestamp": "2016-12-8T13:54:12+08:00", "Duration": "0.0" } { "DataType": "Spectre_DT", "HostName": "spectrum", "Listener": "a", "Timestamp": "2016-12-8T13:54:11+08:00", "Duration": "0.000100080" } { "DataType": "Spectre_DT", "HostName": "spectrum", "Listener": "5", "Timestamp": "2016-12-8T13:54:10+08:00", "Duration": "0.0" }
Таким образом, код, который я использую для десериализации объекта, превращается в ошибку:-
Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'jsonreader.SpectrumData[]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly. To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object. Path 'DataType', line 1, position 12.
Если я Десериализуюсь в динамический объект без использования библиотеки классов, то возникнет эта ошибка:-
dynamic vx = Newtonsoft.Json.JsonConvert.DeserializeObject(strjson);
Additional text encountered after finished reading JSON content: {. Path '', line 2, position 0.
Что я уже пробовал:
public class SpectrumData { public string DataType { get; set; } public string HostName { get; set; } public string Listener { get; set; } public string Timestamp { get; set; } public double Duration { get; set; } } class Program { static void Main(string[] args) { try { var strjson = File.ReadAllText(jsonfile[i].ToString()); SpectrumData[] datajson = JsonConvert.DeserializeObject<SpectrumData[]>(strjson); } catch { } } }