我想到了在反序列化时序列化Int32
和获取Int64
的问题。我的问题更为通用,我有一个object
数组,可以在Int64旁边保存Int32。
所以我不能在反序列化上编写自定义转换器,盲目地假设一切都是Int32 / Int64。
在这种情况下如何处理序列化/反序列化?
答案 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。