public override void WriteJson(JsonWriter writer, TextDocumentSync /*?*/ value, JsonSerializer serializer)
 {
     if (value == null)
     {
         writer.WriteValue(TextDocumentSyncKind.None);
         return;
     }
     if (value.HasOptions)
     {
         serializer.Serialize(writer, value.Options);
     }
     else if (value.HasKind)
     {
         new JValue(value.Value).WriteTo(writer);
     }
 }
        public override TextDocumentSync ReadJson(JsonReader reader, Type objectType, TextDocumentSync /*?*/ existingValue, bool hasExistingValue, JsonSerializer serializer)
        {
            switch (reader.TokenType)
            {
            case JsonToken.Integer:
                return(new TextDocumentSync((TextDocumentSyncKind)Convert.ToInt32(reader.Value)));

            case JsonToken.Null:
            case JsonToken.Undefined:
                return(new TextDocumentSync(TextDocumentSyncKind.None));

            default:
                return(new TextDocumentSync(JObject.Load(reader).ToObject <TextDocumentSyncOptions>(serializer)));
            }
        }