序列化整个JSON对象,但在反序列化时跳过单个属性

时间:2017-05-04 21:00:28

标签: c# json serialization

序列化对象时,我有一个List<T>属性,其中T是一个抽象类型,我想自然地序列化。但是,在反序列化对象时,我希望/需要手动反序列化此抽象列表。我使用自定义JsonConverter来执行后一部分,该自定义class MyObject { public Guid Id; public string Name; public List<MyAbstractType> Things; } 查看每个项目的属性 在列表中,然后将其反序列化为正确的类型并将其放在列表中。

但是我还需要反序列化对象的其余部分,而不是逐个属性。伪代码如下。

为MyObject

class MyObjectConverter : JsonConverter {
    public override object ReadJson(reader, ..., serializer) {
        // Line below will fail because the serializer will attempt to deserlalize the list property.
        var instance = serializer.Deserialize(reader);
        var rawJson = JObject.Load(reader); // Ignore reading from an already-read reader.

        // Now loop-over and deserialize each thing in the list/array.
        foreach (var item in rawJson.Value<JArray>(nameof(MyObject.Things))) {
            var type = item.Value<string>(nameof(MyAbstractType.Type));
            MyAbstractType thing;

            // Create the proper type.
            if (type == ThingTypes.A) {
                thing = item.ToObject(typeof(ConcreteTypeA));
            }   
            else if (type == ThingTypes.B) {
                thing = item.ToObject(typeof(ConcreteTypeB));
            }

            // Add the thing.
            instance.Things.Add(thing);
        }

        return instance;
    }
}

MyObjectConverter

Things

总结一下,我想手动处理sw-precache的反序列化,但允许它们自然地序列化。

0 个答案:

没有答案