有时我的ASP.NET Core API需要返回一个简单的值,即bool
,int
或string
,即使在大多数情况下,我将复杂的对象/数组返回为{{1 }}
我认为出于一致性目的,将简单值作为JSON
返回是一个好主意。什么是转换简单值的最简单方法,无论是JSON
还是bool
还是int
?
我的标准控制器操作如下所示 - 见下文 - 这使我能够返回状态代码和数据。因此,我希望坚持这种方法,而不是返回JSON
。
JsonResult
我只是试图找出将public async Task<IActionResult> Get()
{
// Some logic
return Ok(data);
}
转换为data
的最简单方法,如果它还不是JSON
格式的话。
答案 0 :(得分:0)
查看您的代码,我假设您的应用程序应该是一个需要返回以JSON序列化的某种数据的服务。 好吧,好消息是ASP.NET Core已经包含了一个可以为您完成工作的数据序列化器。 您可能需要根据需要进行设置。
例如,让我们假设以下数据类:
public class Data {
public string Name { get; }
public string Value { get; }
public bool IsValid { get; }
public Data(string name, string value, bool isValid) {
Name = name;
Value = value;
IsValid = isValid;
}
}
然后在Controller中使用以下方法:
public async Task<IActionResult> Get() {
var data = new Data("sample name", "this is a value", true);
return Ok(data);
}
将返回:
{
"name": "sample name",
"value": "this is a value",
"isValid": true
}
即使认为标准序列化行为可能适用于非常简单的实现,您可能需要更多地控制应用程序如何序列化(和反序列化)不同数据类型,尤其是当这些类型与您想要的方式不完全匹配时将数据呈现给客户端。在这种情况下,您可能需要使用Custom Converters。
您可以在ConfigureServices(IServiceCollection服务)方法中设置MVC时进行配置:
// Add framework services.
services.AddMvc().AddJsonOptions(jo => {
// sample serialiser setup
jo.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
jo.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
jo.SerializerSettings.MissingMemberHandling = MissingMemberHandling.Error;
// custom Converters
jo.SerializerSettings.Converters.Add(new MyCustomConverter());
});
Here您可以阅读并了解有关如何设置和使用自定义转换器的更多信息。