如何在控制器中返回JSON结果

np8igboo  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(133)

我想在我的控制器中返回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返回。

rm5edbpk

rm5edbpk1#

问题与关注

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<IdIdentity>类型。

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


1.1 中的更改需要修改CheckRecords方法签名,以返回服务层中的List<IdIdentity>类型。
服务层

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


1.对于result变量,应该使用隐式变量(var)或显式变量(List<IdIdentity>)。

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);
}

相关问题