我正在用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,否则将返回错误。
- 要检查Json结构是否正确:http://jsonlint.com/
- 要从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调用的结果是不同的模型,那么您需要为每个调用创建一个新的模型。您不应该尝试在所有通话中使用相同的型号。