public static Type GetLayerInfoType(this LayerDiscriminator discriminator) { switch (discriminator) { case LayerDiscriminator.ActivationLayerInfo: return(typeof(ActivationLayerInfo)); case LayerDiscriminator.ConvolutionLayerInfo: return(typeof(ConvolutionLayerInfo)); case LayerDiscriminator.PaddingLayerInfo: return(typeof(PaddingLayerInfo)); case LayerDiscriminator.ParameterizedLayerInfo: return(typeof(ParameterizedLayerInfo)); case LayerDiscriminator.PoolingLayerInfo: return(typeof(PoolingLayerInfo)); default: return(typeof(LayerInfo)); } }
public override LayerInfo Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) { throw new JsonException(); } if (!reader.Read() || reader.TokenType != JsonTokenType.PropertyName || reader.GetString() != nameof(LayerDiscriminator)) { throw new JsonException(); } if (!reader.Read() || reader.TokenType != JsonTokenType.Number) { throw new JsonException(); } LayerDiscriminator layerDiscriminator = (LayerDiscriminator)reader.GetInt32(); if (!reader.Read() || reader.GetString() != "LayerData") { throw new JsonException(); } if (!reader.Read() || reader.TokenType != JsonTokenType.StartObject) { throw new JsonException(); } var type = layerDiscriminator.GetLayerInfoType(); var layerInfo = (LayerInfo)JsonSerializer.Deserialize(ref reader, type); if (!reader.Read() || reader.TokenType != JsonTokenType.EndObject) { throw new JsonException(); } return(layerInfo); }