为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我的 .NET Rest API 返回带有额外子属性的列表而不是 [..]?

为什么我的 .NET Rest API 返回带有额外子属性的列表而不是 [..]?

C#
慕尼黑5688855 2023-09-24 10:50:58
我想知道原因有一段时间了:public List<int> getTest(){   List<int> test = new List<int>();   test.add(1);   return test;}返回客户端为:{   test: {            $id: randomnumber,            $values: [1]         }}代替{   test: [1]}我使用 .NET Framework 4.6.1 并像上面的代码一样初始化列表。通常这不是问题,因为在客户端,您可以像测试一样轻松地访问 $values。但我无法释怀,为什么它会这样返回。并希望有人能给我一个令人宽慰的答案,说明为什么以及是否可以在没有额外子属性 $values 和 $id 的情况下返回。该函数在控制器类中从实现类中调用。        [HttpGet, Route("getTest")]        public List<int> getTest()        {            return implementationClass.getTest();        }
查看完整描述

3 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

由于您已将 JSON 序列化设置配置为使用PreserveReferencesHandling.all,因此您的输出与您的预期有很大不同。例如:


var list = new List<int> { 1, 2, 3 };


var json1 = JsonConvert.SerializeObject(list);

var json2 = JsonConvert.SerializeObject(list, 

    new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.All });

将为您提供 JSON 输出的以下 2 种变体:


[1,2,3]

{"$id":"1","$values":[1,2,3]}

因此,您可以删除配置,或者,如果您专门想为此方法更改它,则必须手动进行转换,例如:


public string getTest()

{

   List<int> test = new List<int>();

   test.add(1);

   return JsonConvert.SerializeObject(test);

}


查看完整回答
反对 回复 2023-09-24
?
当年话下

TA贡献1890条经验 获得超9个赞

在 DotNet 中,您将始终获得复杂类型的元数据属性。

要清理 Json 结果,请添加 json 忽略属性,例如:

options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles


查看完整回答
反对 回复 2023-09-24
?
呼唤远方

TA贡献1856条经验 获得超11个赞

用这个。


    [HttpGet, Route("getTest")]

    public IHttpActionResult Get ()

    {

       return Ok(implementationClass.getTest());  // Returns an OkNegotiatedContentResult

    }


查看完整回答
反对 回复 2023-09-24
  • 3 回答
  • 0 关注
  • 124 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信