将JsonConvert.DeserializeObject文件转换为模型类Web api .net核心

时间:2020-07-21 16:25:50

标签: c# .net-core asp.net-core-webapi

我正在使用C#.netcore创建一个WebAPI。我有一种方法可以根据文件ID从URL获取文件流(不同类型)

function async Task<T> GetFile(string id) {
   HttpRequestMessage request = new HttpRequestMessage();
   request.RequestUri = new Uri("serverURL" + id);
   request.Method = HttpMethod.Get;
   HttpResponseMessage response = await httpClient.SendAsync(request, 
   HttpCompletionOption.ResponseContentRead, cancelToken);
   var result = await response.Content.ReadAsStringAsync();
   return JsonConvert.DeserializeObject<T>(result);
}

我想将结果返回到这样的模型中

public class FileModel
{
    public HttpResponseMessage File { get; set; }
}

之后,我将结果转换为base64以获取文件。

我收到此错误 解析值时遇到意外字符:B.路径”,第0行,位置0 因为JsonConvert无法将结果转换为我的FileModel类。我不能在方法中使用HttpResponseMessage,该方法应该是通用的。

谢谢

2 个答案:

答案 0 :(得分:0)

您是否检查了Json的格式是否正确。 看来,您的“结果”格式不正确。

JsonConvert.DeserializeObject(result)需要正确的Json,否则它将返回错误。

  1. 要检查Json结构是否正确:http://jsonlint.com/
  2. 要从Json结构生成类:https://app.quicktype.io/?l=csharp

答案 1 :(得分:0)

您的FileModel不应具有HttpResponseMessage类型的属性,因为这不是Json反序列化器将返回的属性。它将尝试将JSON转换为基于您正在使用的通用模型(T)的类。通用模型(T)的结构必须与要返回的JSON相匹配。

例如,如果您的json看起来像这样:

{
 field1: "value1",
 field2: 123
}

您的模型应如下所示

public class MyModel {
  string field1 { get; set;}
  int field2 { get; set;}
}

如果api调用的结果是不同的模型,则需要为每个调用创建一个新模型。您不应该尝试对所有呼叫使用相同的模型。