C# 如何从查询字符串web api c中删除JSON中的第一个和最后一个方括号#

C# 如何从查询字符串web api c中删除JSON中的第一个和最后一个方括号#,c#,json,entity-framework-6,asp.net-web-api2,C#,Json,Entity Framework 6,Asp.net Web Api2,如何从结果中仅删除响应方括号-响应:[] public HttpResponseMessage GetDetail(int id) { var result = new Dictionary<string, object>(); EDetail EDetailobj = db.EDetails.FirstOrDefault(P => P.DetailID == id); if (EDetailobj != null)

如何从结果中仅删除响应
方括号
-响应:
[]

public HttpResponseMessage GetDetail(int id)
    {

        var result = new Dictionary<string, object>();
        EDetail EDetailobj = db.EDetails.FirstOrDefault(P => P.DetailID == id);
        if (EDetailobj != null)
        {
            result.Add("Status", "ok");

            var responseResult = db.EDetails
                .Where(x => x.DetailID == id)
                .Select(x => new
                {
                    x.DetailID ,
                    x.DetailName,
                    x.Qty,
                    x.Price,
                });
            result.Add("Response", responseResult);
            return Request.CreateResponse(HttpStatusCode.OK, result);
        }
        else
        {
            result.Add("Status", "failure");
            return Request.CreateResponse(result);
        }
    }

{
  "status": "ok",
  "response": [
    {
      "detailID": 1,
      "detailName": "whiteshirt",
      "qty": 12,
      "price": 21.0,
    }
  ]
}
public HttpResponseMessage GetDetail(int-id)
{
var result=newdictionary();
EDetail EDetailobj=db.EDetails.FirstOrDefault(P=>P.DetailID==id);
如果(EDetailobj!=null)
{
结果。添加(“状态”、“确定”);
var responseResult=db.EDetails
.Where(x=>x.DetailID==id)
.选择(x=>new
{
x、 详细编号,
x、 详细名称,
x、 数量,
x、 价格,
});
结果。添加(“响应”,响应结果);
返回Request.CreateResponse(HttpStatusCode.OK,result);
}
其他的
{
结果。添加(“状态”、“失败”);
返回请求.CreateResponse(结果);
}
}
{
“状态”:“确定”,
“答复”:[
{
“detailID”:1,
“详细名称”:“白衬衫”,
“数量”:12,
“价格”:21.0,
}
]
}

在数据库查询中,您将返回与查询匹配的结果列表
x.DetailID==id
。诚然,其中可能只有一个结果,但这并没有改变这样一个事实:
Where
总是返回一个集合,而不是单个对象

现在,作为结果的一部分,返回包含单个项的列表。此列表被序列化为JSON,与您所看到的完全相同——作为包含单个对象的JSON数组(方括号)

如果要避免这种情况,请不要返回集合-返回单个对象:

var responseResult = db.EDetails
            .Where(x => x.DetailID == id)
            .Select(x => new
            {
                x.DetailID ,
                x.DetailName,
                x.Qty,
                x.Price,
            })
            .SingleOrDefault();

在DB查询中,您将返回与查询匹配的结果列表
x.DetailID==id
。诚然,其中可能只有一个结果,但这并没有改变这样一个事实:
Where
总是返回一个集合,而不是单个对象

现在,作为结果的一部分,返回包含单个项的列表。此列表被序列化为JSON,与您所看到的完全相同——作为包含单个对象的JSON数组(方括号)

如果要避免这种情况,请不要返回集合-返回单个对象:

var responseResult = db.EDetails
            .Where(x => x.DetailID == id)
            .Select(x => new
            {
                x.DetailID ,
                x.DetailName,
                x.Qty,
                x.Price,
            })
            .SingleOrDefault();
只需使用First()或FirstOrDefault()即可

选择Single、SingleOrDefault、First和FirstOrDefault时,应注意以下几点:

如果希望在结果集包含多条记录时引发异常,请使用Single或SingleOrDefault

如果希望在结果集不包含任何记录时返回默认值,请使用SingleOrDefault

无论结果集包含什么,如果始终需要一条记录,请使用First或FirstOrDefault

如果结果集不包含任何记录,则需要默认值

与SingleOrDefault相比,FirstOrDefault通常执行得更快,因为它们会迭代集合,直到找到第一个匹配项。而SingleOrDefault迭代整个集合以查找单个匹配项

只需使用First()或FirstOrDefault()即可

选择Single、SingleOrDefault、First和FirstOrDefault时,应注意以下几点:

如果希望在结果集包含多条记录时引发异常,请使用Single或SingleOrDefault

如果希望在结果集不包含任何记录时返回默认值,请使用SingleOrDefault

无论结果集包含什么,如果始终需要一条记录,请使用First或FirstOrDefault

如果结果集不包含任何记录,则需要默认值

与SingleOrDefault相比,FirstOrDefault通常执行得更快,因为它们会迭代集合,直到找到第一个匹配项。而SingleOrDefault迭代整个集合以查找单个匹配项


您不应该首先返回此词典,而应该仅返回
responseResult
,并在响应消息中返回正确的HTTP状态代码。之所以添加括号,是因为您没有使用
FirstOrDefault()
。首先不应返回此词典,而应仅返回
responseResult
,并在响应消息中返回正确的HTTP状态代码。之所以添加括号,是因为您没有使用
FirstOrDefault()