4

Using ServiceStack I need to format this request in order that the CodValue property stays in this format #.#

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

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

However, when I send the request the server side receives CodValue = 0 But as the server side is Java, it returns an error saying that it is Java.Lang.Long and not Double.

How can I force ServiceStack to keep the JSON request in the format 0.0 ?

Roger Oliveira
  • 1,589
  • 1
  • 27
  • 55

2 Answers2

3

You can specify a JsConfig<T>.RawSerializerFn to append any missing .0 suffix, e.g:

JsConfig<double>.IncludeDefaultValue = true;
JsConfig<double>.RawSerializeFn = d =>
{
    var str = d.ToString(CultureInfo.InvariantCulture);
    return str.IndexOf('.') >= 0 ? str : str + ".0";
};

To print the desired result:

var dto = new Request1 { CodValue = 0.0 };

dto.ToJson().Print(); //= {"codValue":0.0}
mythz
  • 141,670
  • 29
  • 246
  • 390
1

Have you tried to use Json.Net ?

doubles will be automatically convert to #.# format and also there is Camel case property name resolver :

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()});

The json string looks like that :

{"request1":{"codValue":0.0}}
Thomas
  • 24,234
  • 6
  • 81
  • 125
  • Great, your suggestion worked here. However, Mythz gave me a smooth way to do it using ServiceStack native options. – Roger Oliveira Mar 29 '16 at 22:53
  • 1
    @RogerOliveira, no worries. I don'r really know the ServiceStack servie. Hope it will be helpfull for others pepople too ^^. – Thomas Mar 29 '16 at 23:05