如何将Web API十进制结果格式设置为两个十进制空格?
我有一个Web API方法,应该返回数字“ 15321.39”。
但是返回的值为15321.3900
我的代码示例是:
[Route("GetDecimalValue")]
[ResponseType(typeof(decimal))]
[HttpGet]
public IHttpActionResult GetDecimal()
{
try
{
decimal result = GetMyNumber(); // returns number such as 15321.39
return Ok(result);
}
catch (Exception ex)
{
return InternalServerError(ex);
}
}
public decimal GetMyNumber(){
return 15321.39m
}
请注意,我不想更改返回类型
参考方案
您可以尝试使用自定义实现替换默认格式器(在您的情况下为JsonFormatter)十进制类型。这是全局性应用的,对于每个小数,您都将用作任何NegotiatedContentResult
的参数(例如,它将对您示例中的Ok
方法开箱即用)。
首先创建一个新的MediaTypeFormatter:
public class MyDecimalFormatter : MediaTypeFormatter
{
public MyDecimalFormatter()
{
SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json"));
SupportedEncodings.Add(Encoding.UTF8);
}
public override bool CanReadType(Type type)
{
return false;
}
public override bool CanWriteType(Type type)
{
return type == typeof(decimal);
}
public override Task WriteToStreamAsync(Type type, object value, Stream writeStream, HttpContent content,
TransportContext transportContext)
{
var decimalValue = (decimal)value;
var formatted = decimalValue.ToString("F2", CultureInfo.InvariantCulture);
using (var writer = new StreamWriter(writeStream))
{
writer.Write(formatted);
}
return Task.FromResult(0);
}
}
然后将其首先添加到Web Api配置中的formatters集合中:
config.Formatters.Insert(0, new MyDecimalFormatter());
您可以在WebApiConfig.cs
Register
方法内或Global.asax
/ Startup.cs
中添加此行。
此方法与result.ToString()
之间的区别
在动作中仅使用.ToString()
。
行动:
//..
decimal result = GetMyNumber();
return Ok(result.ToString("F2")); //Ok receives a string as argument
HTTP响应正文:
"15321.39" //This is a JSON string, not a number
使用自定义MediaTypeFormatter
行动:
//..
decimal result = GetMyNumber();
return Ok(result); //Ok recives a decimal as argument
HTTP响应正文:
15321.39 //This is a JSON number
当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…
Mongo汇总 - javascript我的收藏中有以下文件{ "_id": ObjectId("54490b8104f7142f22ecc97f"), "title": "Sample1", "slug": "samplenews", "cat": …
如何在Wiremock中为JUNIT匹配精确的json - java我正在使用Wiremock在Spring启动应用程序中模拟Junit的REST服务。我的问题是,我无法匹配多个匹配模式。 Junit.javaStringValuePattern pattern = WireMock.matching(".*"); givenThat(post(urlEqualTo("/softwares…
如何在JQuery中操作JSONArray - javascript我有一个php函数,它以JSON返回此代码{"0":{"title":"Dans l\u2019appartement"},"1":{"title":"A l\u2019a\u00e9roport - D\u00e9part de B\u00e9at…
如何使用C#仅从多层嵌入式MongoDB文档中获取具有相应父元素的确切子元素 - c#尝试使用C#从嵌入式MongoDB文档中获取确切的子文档及其对应的父文档,但查询返回所有子文档以及对应的父文档和其他文档。如何将参数设置为使用Filter和findOptions获得完全匹配。我的预期结果是频道1->第1集,并且是给定ID的Child Track。这是我的代码:// Class namespace CrudWithMultilvelNe…