Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从SQLServer中检索完整的json而不是C中的块?_C#_Sql Server_Asp.net Mvc_Json.net - Fatal编程技术网

C# 如何从SQLServer中检索完整的json而不是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},{

我对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中使用此方法执行该查询时:

    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:这就是等待的原因。这不是问题。可能是重复的。非常感谢你帮助我!