【问题标题】:Fetch returns string instead of JSONFetch 返回字符串而不是 JSON
【发布时间】:2020-08-31 11:23:54
【问题描述】:

在下面的代码中data 变量是一个简单的字符串,而不是我希望的json。 这是一个客户端代码:

const battleId = useSelector(selectBattle);
const [waitingBattle, setWaitingBattle] = useState(
    {
        ProcessingBattleDateModified: 30,
        CharactersInBattle: {}
    }
); 
   
fetch('https://localhost:44362/battles/GetWaitingRoomBattle/' + battleId, {
    method: 'GET',
    headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
    }
}).then(response => response.json()).then((data) => {
    setWaitingBattle(data);
    console.log(data);
})

您可能会注意到我正在使用 response.json(),正如其他问题中所建议的那样。

这是我的服务器端点:

[HttpGet("GetWaitingRoomBattle/{battleId}")]
public JsonResult GetWaitingRoomBattle(Guid battleId)
{
BattleEntity battle = _battleService.GetBattle(battleId);

 return new JsonResult(JsonConvert.SerializeObject(battle));
}

结果如下:

有什么建议吗?

【问题讨论】:

  • 你确定服务器真的返回了什么吗?调试器控制台的网络选项卡中有什么?检查响应数据。
  • 您的服务器将响应数据序列化两次...如果您仅在获得字符串后对其进行反序列化。
  • 你应该这样做return new JsonResult{ Data = battle};
  • 是的,服务器将对象作为字符串返回。是的,它被序列化了两次,这是错误的。不,我不能做 JsonResult{ Data = Battle},因为我想使用 Newtonsoft Serializer。
  • 您将 newtonsoft.json 配置为默认的 json 序列化程序。 dotnetcoretutorials.com/2019/12/19/…

标签: javascript c# json reactjs serialization


【解决方案1】:

您可以尝试返回 Content,而不是 JsonResult:

return Content( JsonConvert.SerializeObject(battle), "application/json" );

【讨论】:

    【解决方案2】:

    你可以像下面的代码那样做 JSON.parse(data)

    const parsedData = JSON.parse(data)
    

    现在你可以得到任何想要的键,比如下面的代码行。

    console.log(parsedData.Status) // 3
    

    【讨论】:

      猜你喜欢
      • 2012-11-26
      • 2022-12-06
      • 2017-03-28
      • 2020-12-14
      • 2012-04-30
      • 2019-05-03
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      相关资源
      最近更新 更多