问题描述
全部,尝试创建一个自定义JsonConverter,该序列根据序列化为Json时作为参数传递的区域性(类似于this)来更改小数点分隔符。
控制台应用程序示例:
using System;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Globalization;
namespace TestJsonConverter
{
class Program
{
class FormattedDecimalConverter : JsonConverter
{
private CultureInfo cultureinput;
public FormattedDecimalConverter(CultureInfo culture)
{
this.cultureinput = culture;
}
public override bool CanConvert(Type objectType)
{
return (
objectType == typeof(decimal) ||
objectType == typeof(double) ||
objectType == typeof(float));
}
public override void WriteJson(JsonWriter writer,object value,JsonSerializer serializer)
{
var strValue = Convert.ToString(value,cultureinput);//String
var doublevalue = Convert.ToDouble(strValue,cultureinput);//ConvertToDouble
double doublevalueusingparse;
Double.TryParse(strValue,NumberStyles.Any,cultureinput,out doublevalueusingparse);//TryParseToDouble
writer.WriteValue(strValue);
writer.WriteValue(doublevalue);
writer.WriteValue(doublevalueusingparse);
}
public override object ReadJson(JsonReader reader,Type objectType,object existingValue,JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
static void Main(string[] args)
{
List<double> values = new List<double> { 1.02 };
var converter = new FormattedDecimalConverter(CultureInfo.GetCultureInfo("nl-BE"));
string json = JsonConvert.SerializeObject(values,converter);
Console.WriteLine(json);
Console.ReadLine();
}
}
}
产生以下输出:["1,02",1.02,1.02]
问题:在将值写为double时如何保留逗号分隔符?编写字符串会产生逗号,但同时写两倍的带有句点的作者。
预先感谢
解决方法
由于在Json中用逗号传递双精度值会导致无效的Json,因此更好的选择是将双精度值作为字符串传输,例如{“ Sample”:{“ Text”:“ Sample”,“ Double “:” 10,12“}}或使用句点转移。将在此处选择字符串选项。感谢您所做的所有澄清。