【问题标题】:serialzie c# object to json array with different types [duplicate]将c#对象序列化为具有不同类型的json数组[重复]
【发布时间】:2020-05-20 15:19:48
【问题描述】:

我无法将 c# 对象转换为 json 数组。

    public class ChartValue
    {        
        public DateTime Timestamp { get; set; }
        public float Value { get; set; }
    }

这个对象应该像这样被序列化,例如:

[
   "2020-03-03T13:27:45",
    52.2
]

我需要坚持这个 json 结构,所以调整是不可能的。 对于 serializian,使用 Newtonsoft.json 类。

使用字符串数组对我来说失败了,因为该值是“52.2”,这是不被接受的。 任何想法如何调整序列化或创建“多类型”数组

感谢您的帮助!

【问题讨论】:

标签: c# json json.net


【解决方案1】:

我不确定是否有内置方式,但您可以使用一些反射魔法编写自己的 JsonConverter:

public class ChartValueToArrayJsonConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(ChartValue);
    }

    public override object ReadJson(JsonReader reader,
                                    Type objectType,
                                    object existingValue,
                                    JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }

    public override void WriteJson(JsonWriter writer,
                                   object value,
                                   JsonSerializer serializer)
    {
        if (value == null) return;

        writer.WriteStartArray();

        var properties = value.GetType().GetProperties();
        foreach (var property in properties)
            writer.WriteValue(value.GetType().GetProperty(property.Name).GetValue(value));

        writer.WriteEndArray();
    }
}

用法:

JsonConvert.SerializeObject(new ChartValue(), new ChartValueToArrayJsonConverter()) // results in ["0001-01-01T00:00:00",0.0]

如果您希望全局使用此行为,或者使用 [JsonConverterAttribute(typeof(ChartValueToArrayJsonConverter))] 属性标记您的 ChartValue 类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 2021-12-09
    相关资源
    最近更新 更多