【问题标题】:How to return json result in controller in C#如何在 C# 中的控制器中返回 json 结果
【发布时间】:2023-01-24 19:34:45
【问题描述】:

我想在我的控制器中返回 json 结果。

在我的控制器中,我得到一个 GUID 数组并将其传递给 CheckRecords 方法。

目前,不确定如何将数据从数据服务层返回到我的控制器。

这是我的完整代码

控制器

public JsonResult CheckData()
        {
            string guid = HttpContext.Request["GUID"];
            string result = Services.CheckRecords( guid);
            return Json(result);
        }

服务层

public static IdIdentity CheckRecords(string guid)
        {           
            return DataServices.Services.CheckRecords(guid);
        }

界面

public interface IServices
    {
     IdIdentity CheckRecords(string guid);
    }

数据服务层

它返回列表的位置。

 public class Services : IServices
    {
        public const string PARAM_FORM_GUID = "guid";
     
      public List<IdIdentity> CheckRecords(string guid)
        {
            IdIdentity Code =new IdIdentity();

            if (Code == null)
                return null;            
            
            string sql= "SELECT Name FROM OCODE" +            
                "  WHERE SID IN(SELECT SID FROM OITEMS WHERE OITEM_ID IN (" + PARAM_FORM_GUID + "))";
            

            var parameters = new List<DbParameter>
            {
                CreateParameter(PARAM_FORM_GUID, DbType.String, guid, DBNull.Value),
            };

            sql = ReplaceParameterPrefix(sql);

            return ReadAll(sql, parameters, reader =>
            {
                return new IdIdentity(reader.ReadByName(T_EXCLUSIONS.EXCLUDED_ID, string.Empty),
                    reader.ReadByName(T_EXCLUSIONS.EXCLUDED_ID_SCH, string.Empty));
            }).ToList();
        }
    }

ReplaceParameterPrefix 函数

public static string ReplaceParameterPrefix(string sqlString)
        {
            if (DataServices.TypeOfProvider == DataServices.ProviderType.SqlServer)
            {
                sqlString = sqlString.Replace(':', '@');
            }

            return sqlString;
        }

模型

   [Serializable]
    public class IdIdentity : GenericType
    {
        public string Id { get; set; }
        public string Scheme { get; set; }    
        public string Name { get; set; }
        
        public

        public IdIdentity(string id, string scheme, string name = null)
        {
            Id = id;
            Scheme = scheme;
            Name = name;
            
        }
    }
    

请建议我如何获取结果列表并将其作为 json 在我的控制器中返回。

【问题讨论】:

  • 只需将您的控制器代码更改为:`var result = Services.CheckRecords(guid); return Json(result);` 它应该可以工作。
  • Services类中,你会得到一个编译错误,说明你没有实现方法:IdIdentity CheckRecords(string guid);。或者修改IServicesCheckRecords的返回类型为List&lt;IdIdentity&gt;。这些更改将影响服务层中的 CheckRecords 方法。您还必须为此修改返回类型。
  • 而且string result = Services.CheckRecords( guid);也没有意义。这也会导致编译错误,因为 Services.CheckRecords( guid) 返回 IdIdentity 值,但您分配给具有 string 类型的变量。
  • @YongShun,你能给我一个答案吗?正如我提到的,我想从数据服务层获取值并在我的控制器中以 json 格式返回这些值。几乎没有错误。感谢,如果你能请给我一个解决方案。
  • @Nikolay,请给我一个解决方案。如何从数据服务层获取结果并将这些结果以 json 格式传递给我的控制器。

标签: c# json model-view-controller


【解决方案1】:

问题与关注

  1. 未实现来自IService 的方法。

    来自你的IService

    IdIdentity CheckRecords(string guid);
    

    public class Services : IServices
    {
        public const string PARAM_FORM_GUID = "guid";
         
        public List<IdIdentity> CheckRecords(string guid) { ... }
    }
    

    您没有在 Services 类中实现来自 IService 的方法。

    1. IdIdentity 值分配给 string 类型的变量时出现编译错误。
    string result = Services.CheckRecords( guid);
    

    解决方案

    1. 修改CheckRecords方法签名,返回IServices接口中的List&lt;IdIdentity&gt;类型。
      public interface IServices
      {
          List<IdIdentity> CheckRecords(string guid);
      }
      
      1. 中的变化1个要求您修改CheckRecords方法签名以在服务层返回List&lt;IdIdentity&gt;类型。

      服务层

      public static List<IdIdentity> CheckRecords(string guid)
      {           
          return DataServices.Services.CheckRecords(guid);
      }
      
      1. 您应该为result变量使用隐式类型变量(var)或显式类型变量(List&lt;IdIdentity&gt;)。
      public JsonResult CheckData()
      {
          string guid = HttpContext.Request["GUID"];
          var result = Services.CheckRecords( guid);  // Implicit-typed
          // Or
          // List<IdIdentity> result = Services.CheckRecords( guid); // Explicit-typed
          return Json(result);
      }
      

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多