4

使用ServiceStack我需要爲了格式化這個要求,即CodValue財產以這種形式保持#.#如何使用DataAnnotation使用ServiceStack要求

[DataContract(Name = "request1")] 
public class Request1 
{ 
    [DataMember(Name = "codValue")] 
    public double CodValue { get; set; } 
} 

var request1 = new Request1 { CodValue = 0.0 } 
_serviceClientBase.Post(request1); 

然而,格式化雙重屬性,當我發送序列化對象到JSON請求服務器端收到CodValue = 0 但服務器端是Java,它返回一個錯誤,說它是Java.Lang.Long而不是Double

如何強制ServiceStack0.0的格式保留JSON請求?

回答

3

您可以指定一個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} 
+1

你再次幫助我很多!謝謝,我明白這一點! –

1

您是否嘗試過使用Json.Net

雙打將自動轉換爲#.#格式,也有駱駝情況下屬性名稱解析:

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}} 
+0

太好了,您的建議在此處起作用。但是,Mythz給了我一個使用ServiceStack原生選項的順利方法。 –

+1

@RogerOliveira,別擔心。我不知道ServiceStack服務。希望對其他人也有幫助^^。 – Thomas