Предполагая, что это содержимое потока:
{"data":["4482359","12526","5","5","","Yes, that is right","1"]}
{"data":["2223446","65432","3","3","","Nope, that's not right","0"]}
(...)
вы можете десериализовать эти строки, используя List
. Примерно так:
using System.IO;
using Newtonsoft.Json;
public class RootObject
{
public List data { get; set; }
}
Потоковую передачу JSON можно десериализовать двумя простыми способами:
List dataObjects = new List();
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(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
Конечный продукт будет выглядеть следующим образом:
[ {"data":["value1","value2","value3", (...)]},
{"data":["value1","value2","value3", (...)]} ]
[ 1125]
List dataObjects = new List();
using (StreamReader sr = new StreamReader(stream))
{
var JSONObject = sr.ReadToEnd();
dataObjects = JsonConvert.DeserializeObject>(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
Вот несколько глюков для нескольких-recordset, сохранил procs:
Они делают более трудным снова использовать код. При выполнении нескольких запросов разногласия, Вы смогли бы снова использовать один из тех запросов на другой странице.
Они делают это более трудным к модульному тесту. Каждый раз, когда Вы вносите изменение в один из запросов, необходимо протестировать все результаты. Если бы что-то изменилось, то необходимо вырыть до, видят, какой запрос привел модульный тест к сбою.
Они делают более трудным настроить производительность позже. Если другой DBA входит позади Вас, чтобы помочь производительности улучшиться, они должны сделать больше разрезания и игры в кости для выяснения, куда проблемы возникают из. Затем объедините это с проблемой повторного использования кода - если они оптимизируют один запрос, тот запрос мог бы использоваться в нескольких отличающихся, сохранил procs, и затем они должны пойти, фиксируют всех их - который делает для большего количества поблочного тестирования снова.
Они делают обработку ошибок намного более трудной. Четыре из запросов в сохраненном proc могли бы успешно выполниться, и пятые сбои. Необходимо запланировать это.
Они могут увеличить проблемы блокировки и подвергнуться загрузке в TempDB. Если Ваши сохраненные procs разработаны способом, которым нужны повторяемые чтения, то, чем больше запросов Вы наполняете в сохраненный proc, тем дольше он собирается взять для выполнения, и дольше, он собирается взять для возврата тех результатов назад серверу приложений. То увеличенное время означает более высокую конкуренцию для блокировок, и больше SQL Server должно сохранить в TempDB для управления версиями строки. Вы упомянули, что Вы тяжелы на чтениях, таким образом, эта конкретная проблема не должна быть слишком плохой для Вас, но Вы хотите знать о ней перед многократным использованием этого молотка на интенсивном записью приложении.
Я думаю, что много recordset хранимые процедуры являются большими в некоторых случаях, и это походит на Ваш, возможно, один из них.
Чем больше (больше трафика), Вы располагаете добирается, тем более важный, что 'дополнительный' бит производительности будет иметь значение. Если можно объединить 2-3-4 вызова (и возможно новые соединения) к базе данных в одной, Вы могли сокращать свои хиты базы данных 4-6-8 миллионами в день, который является существенным.
Я использую их экономно, но когда я имею, у меня никогда не было проблемы.
Я рекомендовал бы иметь вызов в одной хранимой процедуре несколько внутренних вызовов хранимых процедур, которые возвращают 1 набор результатов каждый.
create proc foo
as
execute foobar --returns one result
execute barfoo --returns one result
execute bar --returns one result
Тому пути, когда requirments изменяются и Вы только, нужен 3-й и 5-й набор результатов, у Вас есть простой способ вызвать их, не добавляя новые хранимые процедуры и повторно создавая Ваш уровень доступа к данным. Мое текущее приложение возвращает все ссылочные таблицы (например, таблица штатов США), если я хочу их или нет. Худший, когда необходимо получить ссылочную таблицу, и единственный доступ с помощью хранимой процедуры, которая также выполняет дорогой запрос как один из его шести наборов результатов.