【发布时间】:2023-02-06 21:02:33
【问题描述】:
我的反序列化有问题,不知道如何处理。
var jsonString = @"
{
""Result"": [
{
""Id"": 994,
""Name"": ""LL Bottom Bracket"",
},
{
""Id"": 995,
""Name"": ""ML Bottom Bracket"",
}
]
}";
HotelRoomDTO 类如下所示:
public class HotelRoomDTO
{
public int Id { get; set; }
public string Name { get; set; }
}
服务是
public async Task<IEnumerable<HotelRoomDTO>> GetHotelRooms(string checkInDate, string checkOutDate)
{
var settings = new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
MissingMemberHandling = MissingMemberHandling.Ignore
};
var response = await _client.GetAsync($"api/hotelroom?checkInDate={checkInDate}& checkOutDate={checkOutDate}");
var content = await response.Content.ReadAsStringAsync();
var rooms = JsonConvert.DeserializeObject<IEnumerable<HotelRoomDTO>>(content, settings);
return rooms;
}
当我尝试运行应用程序反序列化器时崩溃并且不返回结果。我认为问题出在这个“结果”对象列表中。当它不存在时一切正常但是当我从真实数据库获取数据并尝试反序列化它时自动添加这个“结果”并且代码不起作用
【问题讨论】:
-
你确定它返回
IEnumerable<HotelRoomDTO>吗? -
崩溃是对错误的非常糟糕的描述。您收到什么异常消息?
-
假设,额外的引号
""只是拼写错误,您的 JSON 字符串描述了一个object(注意开头和结尾的花括号{}),但您尝试将其反序列化为IEnumberable(什么会是一个以[]开头和结尾的 JSON 数组)。您需要反序列化为具有IEnumerable <HotelRoomDTO> Result {get;set;}属性的类 -
@derpirscher C# 具有逐字字符串文字
@"...",其中字符串中包含的双引号需要用另一个双引号转义,以便""成为实际字符串值中的"。 -
@phuzi 我试试。当再次尝试将强制转换结果序列化为 (IEnumerable<HotelRoomDTO>) 时,因为没有它我再次遇到错误没有序列化程序的响应