public override void Write(Utf8JsonWriter writer, ChpOperation value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WritePropertyName( value switch { ChpOperation.Cnot _ => "Cnot", ChpOperation.Hadamard _ => "Hadamard", ChpOperation.Phase _ => "Phase", ChpOperation.AdjointPhase _ => "AdjointPhase", _ => throw new JsonException() }
public override ChpOperation Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { reader.Require(JsonTokenType.StartObject, read: false); reader.Require(JsonTokenType.PropertyName); ChpOperation?operation = null; ulong idx; switch (reader.GetString()) { case "Cnot": var idxs = JsonSerializer.Deserialize <List <ulong> >(ref reader); operation = new ChpOperation.Cnot { IdxControl = idxs[0], IdxTarget = idxs[1] }; break; case "Hadamard": reader.Read(); idx = reader.GetUInt64(); operation = new ChpOperation.Hadamard { IdxTarget = idx }; break; case "Phase": reader.Read(); idx = reader.GetUInt64(); operation = new ChpOperation.Phase { IdxTarget = idx }; break; case "AdjointPhase": reader.Read(); idx = reader.GetUInt64(); operation = new ChpOperation.AdjointPhase { IdxTarget = idx }; break; } if (operation == null) { throw new JsonException("Did not read an operation."); } reader.Require(JsonTokenType.EndObject); return(operation); }