如何在保留类型的同时取消/序列化任意数据?

时间:2016-09-12 08:50:32

标签: serialization types json.net

我想到了在反序列化时序列化Int32和获取Int64的问题。我的问题更为通用,我有一个object数组,可以在Int64旁边保存Int32。

所以我不能在反序列化上编写自定义转换器,盲目地假设一切都是Int32 / Int64。

在这种情况下如何处理序列化/反序列化?

1 个答案:

答案 0 :(得分:0)

您可以使用JSON.net (de)serialize untyped property中的UntypedToTypedValueConverter,但有一点不同 - 您需要使用[JsonProperty(ItemConverterType = typeof(UntypedToTypedValueConverter))]将其应用于数组项而不是数组本身,例如:

public class RootObject
{
    [JsonProperty(ItemConverterType = typeof(UntypedToTypedValueConverter))]
    public object [] Items { get; set; }
}

这会将转换器应用于数组中的条目而不是数组本身。然后使用JsonSerializerSettings.TypeNameHandling = TypeNameHandling.Auto序列化和反序列化,例如:

var root = new RootObject { Items = new object[] { 1, 1L, int.MaxValue, long.MaxValue } };
var settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto };
var json = JsonConvert.SerializeObject(root, settings);
var root2 = JsonConvert.DeserializeObject<RootObject>(json, settings);

示例fiddle