[英]How to write List<double> to Json in scientific notation in c#?
我正在尝试将 List 序列化为 json 文件,如下所示
class ScientificDoubleConverter : JsonConverter
{
public override bool CanRead { get { return true; } }
public override bool CanConvert(Type objectType)
{
return true;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
if (value is List<double> myList)
{
JArray myArray = new JArray();
myList.ForEach(dblValue => myArray.Add(dblValue.ToString("E")));
myArray.WriteTo(writer);
}
}
}
这有效,但我得到了 qoutes 的值
"values": ["-9,811880E-002", "2,236657E-002", "-4,020144E-001", ...
我不想要引号和价值科学记数法
"values": [-9.811880E-002, 2.236657E-002, -4.020144E-001, ...
您正在明确格式化这些值。 不要那样做 - 将元素直接添加到数组中:
if (value is List<double> myList)
{
JArray myArray = new JArray();
foreach (var element in myList)
{
myArray.Add(element);
}
myArray.WriteTo(writer);
}
或直接写信给作者:
if (value is List<double> myList)
{
writer.WriteStartArray();
foreach (var element in myList)
{
writer.WriteValue(element);
}
writer.WriteEndArray();
}
这可能无法达到您想要的精确表示(就科学记数法而言),但它将获得您尝试序列化的数据的有效 JSON 表示。 读取 JSON 的任何内容都应该能够从 JSON 读取完全相同的值。
如果您绝对必须自定义格式,则可以使用JsonWriter.WriteRawValue
,使用不变的文化来格式化您的值。 但我强烈建议你不要这样做。 我会对无法处理 Json.NET 的常规 output 的 JSON 解析器感到非常惊讶。 如果您真的必须这样做,这是一个完整的示例:
using System;
using System.Globalization;
using System.Collections.Generic;
using Newtonsoft.Json;
class Program
{
static void Main(string[] args)
{
var writer = new JsonTextWriter(Console.Out);
var list = new List<double>
{
-9.811880E-002,
2.236657E-002,
-4.020144E-001
};
WriteList(writer, list);
}
static void WriteList(JsonWriter writer, List<double> list)
{
writer.WriteStartArray();
foreach (var element in list)
{
writer.WriteRawValue(element.ToString("E", CultureInfo.InvariantCulture));
}
writer.WriteEndArray();
}
}
Output:
[-9.811880E-002,2.236657E-002,-4.020144E-001]
你正在做dblValue.ToString("E")
这就是你得到字符串的原因。
JArray.Add除了 Object 也作为参数。 因此,您不必将双精度转换为字符串。 直接加入数组即可。
在这里查看详细信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.