使用System.Text.Json将List <double>写入Json数组而无需缩进

时间:2019-10-15 13:04:02

标签: c# json system.text.json jsonconverter

注意:我使用的是import tensorflow_datasets as tfds import tensorflow as tf (train_data, test_data) = tfds.load('mnist', split=['train', 'test'], as_supervised=True) train_data = train_data.map(lambda data, label: (tf.image.grayscale_to_rgb(tf.image.resize(data, [28,28])), label)).batch(10) 而不是System.Text.Json,对此有类似的问题已经回答。除JSON.NET外,我需要相同的答案。我想将我的课程写给Json,并确保它是人类可读的。为此,我在选项中将缩进设置为true。但是,该类包含一个System.Text.Json属性,我不想缩进,因为它会使文件很长。

所以我有这个:

List<double>

,我希望它像这样序列化:

public class ThingToSerialize
{
    public string Name {get;set;}
    //other properties here
    public List<double> LargeList {get;set;}
};

var thing = new ThingToSerialize {Name = "Example", LargeList = new List<double>{0,0,0}};
var options = new JsonSerializerOptions
{
    WriteIndented = true
};

options.Converters.Add(new DontIndentArraysConverter());

var s = JsonSerializer.Serialize(thing, options);

不是这个(或类似的东西):

{
    "Name": "Example",
    "LargeList ": [0,0,0]
}

我已经写了{ "Name": "Example", "LargeList ": [ 0, 0, 0 ] } 来达到这个目的:

JsonConverter

但是这会将数组写为我真正不想要的字符串。最好的方法是什么?

即您得到的是[[1,2,3]”而不是[1,2,3]

第二,传递给public class DontIndentArraysConverter : JsonConverter<List<double>> { public override bool CanConvert(Type objectType) { return objectType == typeof(List<double>); } public override List<double> Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { return JsonSerializer.Deserialize<List<double>>(reader.GetString()); } public override void Write(Utf8JsonWriter writer, List<double> value, JsonSerializerOptions options) { var s = JsonSerializer.Serialize(value); writer.WriteStringValue(s); } } 函数的writer对象具有Write属性,但是不能更改。因此,如果我使用writer对象手动将数组写出,则会缩进。

0 个答案:

没有答案