private static bool TryExtractProperty(VowpalWabbitJsonParseState state, string property, string expectedProperty, JsonToken expectedToken, Action <JsonReader> success) { if (property.Equals(expectedProperty, StringComparison.OrdinalIgnoreCase)) { if (!state.Reader.Read() && state.Reader.TokenType != expectedToken) { throw new VowpalWabbitJsonException(state.Reader, $"Property '{expectedProperty}' must be of type '{expectedToken}'"); } success(state.Reader); return(true); } return(false); }
private static bool TryExtractArrayProperty <T>(VowpalWabbitJsonParseState state, string property, string expectedProperty, Action <T[]> success) { return(TryExtractProperty( state, property, expectedProperty, JsonToken.StartArray, reader => { success(JsonSerializer.CreateDefault().Deserialize <T[]>(reader)); if (state.Reader.TokenType != JsonToken.EndArray && !reader.Read()) { throw new VowpalWabbitJsonException(state.Reader, $"Property {expectedProperty} must end with 'EndArray'"); } })); }