[英]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.