JsonConvert.DeserializeObject文件转换为一个模型类webapi.net核心



我正在用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,该方法应该是泛型的。

感谢

请检查Json的格式是否正确。看起来,你"结果";形式不正确。

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

  1. 要检查Json结构是否正确:http://jsonlint.com/
  2. 要从Json结构生成类,请执行以下操作:https://app.quicktype.io/?l=csharp

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

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

{
field1: "value1",
field2: 123
}

你的模型应该像这个

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

如果api调用的结果是不同的模型,那么您需要为每个调用创建一个新的模型。您不应该尝试在所有通话中使用相同的型号。

最新更新