如何在反序列化之前从 json 字符串中删除元素?
How to remove an element from json string before deserialize it?
假设 return 类型是
public ActionResult Balance()
{
var myDtos = new List<BalanceModelDto>();
return Ok(new {data = myDtos});
}
在我的 xunit 中,我断言 return 类型。
using (var client = new HttpClient())
{
var response = await client.GetAsync($"/Balance");
var responseString = await response.Content.ReadAsStringAsync();
var result = JsonConvert.DeserializeObject<BalanceModelDto>(responseString);
Assert.IsType<BalanceModelDto>(result);
Assert.Equal(1, result.Balance);
}
问题是 responseString
是 "{\"data\":[{"balance\":1}]}"
。但我想要的只是 "[{"balance\":1}]"
两者之一:您应该查看 result.data
而不仅仅是 result
。
或:return Ok(myDtos);
来自 ActionMethod。
反序列化为JObject
:
var responseRaw = (JObject) JsonConvert.DeserializeObject(responseString);
然后将 json 对象的“数据”属性 转换为 BalanceModelDto[]
:
var result = responseRaw["data"].ToObject<BalanceModelDto[]>();
假设 return 类型是
public ActionResult Balance()
{
var myDtos = new List<BalanceModelDto>();
return Ok(new {data = myDtos});
}
在我的 xunit 中,我断言 return 类型。
using (var client = new HttpClient())
{
var response = await client.GetAsync($"/Balance");
var responseString = await response.Content.ReadAsStringAsync();
var result = JsonConvert.DeserializeObject<BalanceModelDto>(responseString);
Assert.IsType<BalanceModelDto>(result);
Assert.Equal(1, result.Balance);
}
问题是 responseString
是 "{\"data\":[{"balance\":1}]}"
。但我想要的只是 "[{"balance\":1}]"
两者之一:您应该查看 result.data
而不仅仅是 result
。
或:return Ok(myDtos);
来自 ActionMethod。
反序列化为JObject
:
var responseRaw = (JObject) JsonConvert.DeserializeObject(responseString);
然后将 json 对象的“数据”属性 转换为 BalanceModelDto[]
:
var result = responseRaw["data"].ToObject<BalanceModelDto[]>();