C# 如何从SQLServer中检索完整的json而不是C中的块?
我对SQL Server和C ASP.NET MVC有一个问题,首先,我创建了一个从数据库检索json的存储过程。当我在Management Studio中使用EXEC过程名称时,该过程正常工作 有意不格式化存储过程结果: {Id:1,Nomb布雷:1,Nomb布雷:1,Nomb布雷:1,Nomb布雷:1,Nomb布雷:1,Nomb布雷:1,Nomb布雷:1,Nomb布雷:1,Nomb布雷:1,Nomb布雷:1.3,Nomb布雷:墨西哥墨西哥墨西哥墨西哥墨西哥,墨西哥:墨西哥,数字:484},{Id:3,诺布雷:加利福尼亚州:下加利福尼亚州,下加利福尼亚州,下加利福尼亚州,警察:{,派:{{:{:{Id:1,Id:MX:2,数字:2,数字:2,数字:2,数字:2,2,诺布雷:2,诺布雷:2,诺布雷:2,数字:2,诺布雷:2,诺布雷:2,诺布雷:2,诺布雷:墨西哥:墨西哥:墨西哥:墨西哥:墨西哥:墨西哥:墨西哥:墨西哥:墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,484},{Id:5,名称:Coahuila,Pais:{Id:6,诺姆布雷:科里马,派斯:{{Id:MX:MX,诺姆布雷:科里马,派斯:{Id:MX,诺姆布雷:墨西哥墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥:墨西哥,墨西哥:墨西哥,墨西哥:墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,数字:墨西哥,数字:484}}},},{Id:Id:Id:MX,墨西哥,墨西哥,墨西哥,墨西哥:墨西哥,数字:墨西哥,数字:墨西哥,数字:墨西哥:墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,ISO:墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,{Id:MX,Nombre:México,ISO:MEX,Numero:484},{Id:10,虚拟:10,虚拟:10,虚拟:杜拉非政府,杜拉非政府,警察:{{{Id:MX,虚拟:墨西哥墨西哥墨西哥墨西哥墨西哥,数字:484}}},{{Id:11,虚拟:11,虚拟:10,虚拟:鸟鸟鸟鸟鸟鸟网,警察:10,虚拟:杜兰戈:杜拉奥:墨西哥墨西哥墨西哥政府:10,10,虚拟:10,虚拟:10,虚拟:10,虚拟:10。10,虚拟:10,虚拟:10,虚拟:10,虚拟:10,虚拟:Du布雷:杜布雷:杜拉维维维维政府,警察:10,警察:10,警察:杜瓦瓦图图图图图强:10,警察:10,警察:10,警察:10,虚拟:杜拉非政府,警察:杜拉非政府,警察:10,警察:杜拉非政府,警察:杜拉图图图图图图图强,警察:10,警察:10,警察:杜拉非政府,警察地址{Id:14,名称:Jalisco,Pais:{Id:15,诺姆布雷:墨西哥墨西哥墨西哥,数字:484}}},{Id:15,诺姆布雷:墨西哥墨西哥墨西哥,派斯:{Id:MX,诺姆布雷:墨西哥墨西哥墨西哥墨西哥,墨西哥墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥:墨西哥,墨西哥,墨西哥:墨西哥:墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,数字:484},警察:{,{,{,{Id:{Id:17,墨西哥,墨西哥:17,墨西哥:17,莫布雷:莫布雷:17,莫布雷:莫布雷:莫布雷:莫布雷:莫布雷:莫布雷:莫布雷:莫布雷:莫布雷:莫布雷:莫布雷:莫罗:莫布雷:莫罗:莫罗:莫罗:莫罗:莫罗:莫罗:莫罗:莫罗:莫罗:莫罗:莫罗:例如,Pais:{Id:MX,Nombre:México,ISO:MEX,Numero:484},(Id:19,19,Nomb布雷:19,Nomb布雷:19,Nomb布雷:19,Nomb布雷:19,Nomb布雷:19,Nomb布雷:19,NoM:19,Nomb布雷:19,Nomb布雷:新墨西哥州的一个政府,派斯:{Id:MX,Nomb布雷:新墨西哥州:墨西哥政府:19,Nomb布雷:墨西哥墨西哥墨西哥,墨西哥墨西哥墨西哥墨西哥,墨西哥湾,墨西哥湾,墨西哥政府,警察:墨西哥,警察:{,警察:墨西哥,警察:{:{{{Id:MX:墨西哥:墨西哥:墨西哥:墨西哥:墨西哥,警察:墨西哥,警察:墨西哥,警察:1,数字:484}},{},{,{Id:21,诺布雷:21,新布雷:普埃布拉:普埃布拉:普埃布拉:普埃布拉:普埃布拉,普埃布拉,普埃布拉,普埃布拉,警察地址:484},{Id:23,名字:Quintana Roo,Pais:{Id:24,诺姆布雷:圣路易斯波托斯,派斯:{Id:MX:MX:MX,诺姆布雷:墨西哥墨西哥墨西哥,诺姆布雷:墨西哥墨西哥墨西哥,诺姆布雷:墨西哥墨西哥墨西哥墨西哥,墨西哥墨西哥墨西哥,墨西哥墨西哥,墨西哥墨西哥,墨西哥墨西哥,墨西哥墨西哥,墨西哥,数字:484}},{1},{Id:Id:24,诺姆布雷:墨西哥:圣路易斯波托斯..波托斯,派斯:{,派斯:{,派斯:{,派斯:{,派斯:{,派斯:{{,派斯:{{,派斯:{,派斯:{,派斯:{:墨西哥:圣路易斯:圣路易斯:圣路易斯:圣路易斯:圣路易斯:圣路易斯:圣路易斯,圣路易斯:圣路易斯:圣路易斯:圣路易斯:圣路易斯,圣路易斯:圣路易斯,圣路易斯:圣路易斯,圣路易斯:圣路易斯:圣路易斯,圣路易斯我的名字是{Id:MX,Nombre:México,ISO:MEX,Numero:484},{Id:28,诺布尔:28,诺布尔:28,诺布尔:政府:政府:政府:28,诺布尔:政府:政府:28,诺布尔:政府:政府:28,诺布尔:28,诺布尔:政府:政府:政府:政府:政府:政府:政府:政府:政府:政府:政府:政府:政府:政府:政府:28,诺布尔:政府:28,政府:28,政府:28,政府:28,政府:28,政府:28,政府:28,政府:28,政府:28,政府:28,诺布尔:28,政府:28,诺布尔:28,诺布尔:政府:政府:28,诺布尔:政府:政府:政府:政府:28,政府:政府:政府:政府:政府:政府:政府:政府:政府:政府:28,政府:政府:政府:政府:政府:政府:政府:政府:政府:政府:政府:政府:政府:政府:政府:政府:政府:政府:政府:政府:政府:政府:政府:政府:政府:政府:政府:政府},{Id:32,名称:Zacatecas,Pais:{Id:MX,Nombre:México,ISO:MEX,Numero:484}] 检查结果以方括号完成数组。但在C中使用此方法执行该查询时:C# 如何从SQLServer中检索完整的json而不是C中的块?,c#,sql-server,asp.net-mvc,json.net,C#,Sql Server,Asp.net Mvc,Json.net,我对SQL Server和C ASP.NET MVC有一个问题,首先,我创建了一个从数据库检索json的存储过程。当我在Management Studio中使用EXEC过程名称时,该过程正常工作 有意不格式化存储过程结果: {Id:1,Nomb布雷:1,Nomb布雷:1,Nomb布雷:1,Nomb布雷:1,Nomb布雷:1,Nomb布雷:1,Nomb布雷:1,Nomb布雷:1,Nomb布雷:1,Nomb布雷:1.3,Nomb布雷:墨西哥墨西哥墨西哥墨西哥墨西哥,墨西哥:墨西哥,数字:484},{
public async Task<List<T>> ListAsync<T>(Type tclass) where T : class, new ()
{
var connString = _connectionSettings.ConnString;
using (_conn = new SqlConnection(connString))
{
try
{
await _conn.OpenAsync();
_command = new SqlCommand($"List{tclass.Name}", _conn)
{
CommandType = CommandType.StoredProcedure
};
_command.Parameters.Clear();
using (_dataReader = await _command.ExecuteReaderAsync())
{
List<T> data = null;
while (await _dataReader.ReadAsync())
{
data = JsonConvert.DeserializeObject<List<T>>(_dataReader[0].ToString());
}
return data ?? null;
}
}
catch (Exception exception)
{
log.Error(exception.Message, exception);
return null;
}
}
}
我仅从json获取此信息,而不是故意格式化:
{Id:1,Nomb布雷:1,Nomb布雷:1,Nomb布雷:1,Nomb布雷:1,Nomb布雷:1,Nomb布雷:1,Nomb布雷:1,Nomb布雷:1,Nomb布雷:1,Nomb布雷:1.3,Nomb布雷:墨西哥墨西哥墨西哥墨西哥墨西哥,墨西哥:墨西哥,数字:484},{Id:3,诺布雷:加利福尼亚州:下加利福尼亚州,下加利福尼亚州,下加利福尼亚州,警察:{,派:{{:{:{Id:1,Id:MX:2,数字:2,数字:2,数字:2,数字:2,2,诺布雷:2,诺布雷:2,诺布雷:2,数字:2,诺布雷:2,诺布雷:2,诺布雷:2,诺布雷:墨西哥:墨西哥:墨西哥:墨西哥:墨西哥:墨西哥:墨西哥:墨西哥:墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,484},{Id:5,名称:Coahuila,Pais:{Id:6,诺姆布雷:科里马,派斯:{{Id:MX:MX,诺姆布雷:科里马,派斯:{Id:MX,诺姆布雷:墨西哥墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥:墨西哥,墨西哥:墨西哥,墨西哥:墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,数字:墨西哥,数字:484}}},},{Id:Id:Id:MX,墨西哥,墨西哥,墨西哥,墨西哥:墨西哥,数字:墨西哥,数字:墨西哥,数字:墨西哥:墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,ISO:墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,{Id:MX,Nombre:México,ISO:MEX,Numero:484},{Id:10,虚拟:10,虚拟:10,虚拟:杜拉非政府,杜拉非政府,警察:{{{Id:MX,虚拟:墨西哥墨西哥墨西哥墨西哥墨西哥,数字:484}}},{{Id:11,虚拟:11,虚拟:10,虚拟:鸟鸟鸟鸟鸟鸟网,警察:10,虚拟:杜兰戈:杜拉奥:墨西哥墨西哥墨西哥政府:10,10,虚拟:10,虚拟:10,虚拟:10,虚拟:10。10,虚拟:10,虚拟:10,虚拟:10,虚拟:10,虚拟:Du布雷:杜布雷:杜拉维维维维政府,警察:10,警察:10,警察:杜瓦瓦图图图图图强:10,警察:10,警察:10,警察:10,虚拟:杜拉非政府,警察:杜拉非政府,警察:10,警察:杜拉非政府,警察:杜拉图图图图图图图强,警察:10,警察:10,警察:杜拉非政府,警察地址{Id:14,名称:Jalisco,Pais:{Id:15,诺姆布雷:墨西哥墨西哥墨西哥,数字:484}}},{Id:15,诺姆布雷:墨西哥墨西哥墨西哥,派斯:{Id:MX,诺姆布雷:墨西哥墨西哥墨西哥墨西哥,墨西哥墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥:墨西哥,墨西哥,墨西哥:墨西哥:墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,墨西哥,数字:484},警察:{,{,{,{Id:{Id:17,墨西哥,墨西哥:17,墨西哥:17,莫布雷:莫布雷:17,莫布雷:莫布雷:莫布雷:莫布雷:莫布雷:莫布雷:莫布雷:莫布雷:莫布雷:莫布雷:莫布雷:莫罗:莫布雷:莫罗:莫罗:莫罗:莫罗:莫罗:莫罗:莫罗:莫罗:莫罗:莫罗:莫罗:例如,Pais:{Id:MX,Nombre:México,ISO:MEX,Numero:484},(Id:19,19,Nomb布雷:19,Nomb布雷:19,Nomb布雷:19,Nomb布雷:19,Nomb布雷:19,Nomb布雷:19,NoM:19,Nomb布雷:19,Nomb布雷:新墨西哥州的一个政府,派斯:{Id:MX,Nomb布雷:新墨西哥州:墨西哥政府:19,Nomb布雷:墨西哥墨西哥墨西哥,墨西哥墨西哥墨西哥墨西哥,墨西哥湾,墨西哥湾,墨西哥政府,警察:墨西哥,警察:{,警察:墨西哥,警察:{:{{{Id:MX:墨西哥:墨西哥:墨西哥:墨西哥:墨西哥,警察:墨西哥,警察:墨西哥,警察:1,数字:484}},{},{,{Id:21,诺布雷:21,新布雷:普埃布拉:普埃布拉:普埃布拉:普埃布拉:普埃布拉,普埃布拉,普埃布拉,普埃布拉,警察
无效的json,json不完整,newtonsoft将此设置为无效是显而易见的,但数据分块的原因是什么?如果要从存储过程而不是结果集返回变量,请使用输出参数:
CREATE PROCEDURE ListState @JSON nvarchar(max) out
AS
BEGIN
SET @JSON = ( SELECT State.Id, State.Nombre, JSON_QUERY((SELECT * FROM Country WHERE Country.Id = State.Pais FOR JSON PATH, WITHOUT_ARRAY_WRAPPER)) AS Pais FROM State FOR JSON AUTO);
END
GO
并从客户端上的SqlParameter访问该值
或返回单行、单列结果集中的值
CREATE PROCEDURE ListState
AS
BEGIN
SET @JSON = ( SELECT State.Id, State.Nombre, JSON_QUERY((SELECT * FROM Country WHERE Country.Id = State.Pais FOR JSON PATH, WITHOUT_ARRAY_WRAPPER)) AS Pais FROM State FOR JSON AUTO);
select @JSON doc;
END
GO
并从客户端上的SqlCommand.ExecuteScalar或SqlCommand.ExecuteReader访问值。dataReader[0]的.Length是多少。ToString?此行返回数据??null;是冗余的。您返回的是数据
; 将执行完全相同的操作。您的字符串长度为2033个字符;这是一个神奇的数字。当XML和JSON结果超过此长度时,它们都会以块的形式返回,并且需要多个.Read调用才能将数据缝合在一起,就像数据在多行中一样。使用ExecuteReaderAsyncCommand.SequentialAccess和.GetTextReader0进行流式处理。对于XML,有一个ExecuteXmlReader方法来简化这个过程,对于JSON,您必须自己完成繁重的工作。@jdweng:这就是等待的原因。这不是问题。可能是重复的。非常感谢你帮助我!