如何使用 DataAnnotation 将对象序列化为 JSON 以使用 ServiceStack 请求格式化双 属性
How to serialize object to JSON using DataAnnotation to format double property using ServiceStack request
使用 ServiceStack
我需要格式化此请求,以便 CodValue
属性 保持此格式 #.#
[DataContract(Name = "request1")]
public class Request1
{
[DataMember(Name = "codValue")]
public double CodValue { get; set; }
}
var request1 = new Request1 { CodValue = 0.0 }
_serviceClientBase.Post(request1);
但是,当我发送请求时,服务器端收到 CodValue = 0
但是由于服务器端是 Java
,它 returns 一个错误说它是 Java.Lang.Long
而不是 Double
。
如何强制 ServiceStack
以 0.0
格式保留 JSON
请求?
您尝试过使用 Json.Net 吗?
double 将自动转换为 #.#
格式,并且还有 Camel case 属性 名称解析器:
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
...
class Request1
{
public double CodValue { get; set; }
}
...
var request = new {Request1 = new Request1()};
var json= JsonConvert.SerializeObject(request,
new JsonSerializerSettings() {ContractResolver = new CamelCasePropertyNamesContractResolver()});
json 字符串看起来像这样:
{"request1":{"codValue":0.0}}
您可以指定 JsConfig<T>.RawSerializerFn
来附加任何缺失的 .0
后缀,例如:
JsConfig<double>.IncludeDefaultValue = true;
JsConfig<double>.RawSerializeFn = d =>
{
var str = d.ToString(CultureInfo.InvariantCulture);
return str.IndexOf('.') >= 0 ? str : str + ".0";
};
打印想要的结果:
var dto = new Request1 { CodValue = 0.0 };
dto.ToJson().Print(); //= {"codValue":0.0}
使用 ServiceStack
我需要格式化此请求,以便 CodValue
属性 保持此格式 #.#
[DataContract(Name = "request1")]
public class Request1
{
[DataMember(Name = "codValue")]
public double CodValue { get; set; }
}
var request1 = new Request1 { CodValue = 0.0 }
_serviceClientBase.Post(request1);
但是,当我发送请求时,服务器端收到 CodValue = 0
但是由于服务器端是 Java
,它 returns 一个错误说它是 Java.Lang.Long
而不是 Double
。
如何强制 ServiceStack
以 0.0
格式保留 JSON
请求?
您尝试过使用 Json.Net 吗?
double 将自动转换为 #.#
格式,并且还有 Camel case 属性 名称解析器:
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
...
class Request1
{
public double CodValue { get; set; }
}
...
var request = new {Request1 = new Request1()};
var json= JsonConvert.SerializeObject(request,
new JsonSerializerSettings() {ContractResolver = new CamelCasePropertyNamesContractResolver()});
json 字符串看起来像这样:
{"request1":{"codValue":0.0}}
您可以指定 JsConfig<T>.RawSerializerFn
来附加任何缺失的 .0
后缀,例如:
JsConfig<double>.IncludeDefaultValue = true;
JsConfig<double>.RawSerializeFn = d =>
{
var str = d.ToString(CultureInfo.InvariantCulture);
return str.IndexOf('.') >= 0 ? str : str + ".0";
};
打印想要的结果:
var dto = new Request1 { CodValue = 0.0 };
dto.ToJson().Print(); //= {"codValue":0.0}