亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我的 .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 關注
  • 168 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號