internal override void WriteProperties(Utf8JsonWriter json)
 {
     if (KeyType != default)
     {
         json.WriteString(KeyTypePropertyNameBytes, KeyTypeExtensions.AsString(KeyType));
     }
     if (KeyOps != null)
     {
         json.WriteStartArray(KeyOpsPropertyNameBytes);
         foreach (var operation in KeyOps)
         {
             json.WriteStringValue(KeyOperationsExtensions.AsString(operation));
         }
         json.WriteEndArray();
     }
     if (!string.IsNullOrEmpty(CurveName))
     {
         json.WriteString(CurveNamePropertyNameBytes, CurveName);
     }
     if (N != null)
     {
         json.WriteString(NPropertyNameBytes, Base64Url.Encode(N));
     }
     if (E != null)
     {
         json.WriteString(EPropertyNameBytes, Base64Url.Encode(E));
     }
     if (DP != null)
     {
         json.WriteString(DPPropertyNameBytes, Base64Url.Encode(DP));
     }
     if (DQ != null)
     {
         json.WriteString(DQPropertyNameBytes, Base64Url.Encode(DQ));
     }
     if (QI != null)
     {
         json.WriteString(QIPropertyNameBytes, Base64Url.Encode(QI));
     }
     if (P != null)
     {
         json.WriteString(PPropertyNameBytes, Base64Url.Encode(P));
     }
     if (Q != null)
     {
         json.WriteString(QPropertyNameBytes, Base64Url.Encode(Q));
     }
     if (X != null)
     {
         json.WriteString(XPropertyNameBytes, Base64Url.Encode(X));
     }
     if (Y != null)
     {
         json.WriteString(YPropertyNameBytes, Base64Url.Encode(Y));
     }
     if (D != null)
     {
         json.WriteString(DPropertyNameBytes, Base64Url.Encode(D));
     }
     if (K != null)
     {
         json.WriteString(KPropertyNameBytes, Base64Url.Encode(K));
     }
     if (T != null)
     {
         json.WriteString(TPropertyNameBytes, Base64Url.Encode(T));
     }
 }
        internal override void ReadProperties(JsonElement json)
        {
            foreach (JsonProperty prop in json.EnumerateObject())
            {
                switch (prop.Name)
                {
                case KeyIdPropertyName:
                    KeyId = prop.Value.GetString();
                    break;

                case KeyTypePropertyName:
                    KeyType = KeyTypeExtensions.ParseFromString(prop.Value.GetString());
                    break;

                case KeyOpsPropertyName:
                    foreach (var element in prop.Value.EnumerateArray())
                    {
                        KeyOps.Add(KeyOperationsExtensions.ParseFromString(element.ToString()));
                    }
                    break;

                case CurveNamePropertyName:
                    CurveName = prop.Value.GetString();
                    break;

                case NPropertyName:
                    N = Base64Url.Decode(prop.Value.GetString());
                    break;

                case EPropertyName:
                    E = Base64Url.Decode(prop.Value.GetString());
                    break;

                case DPPropertyName:
                    DP = Base64Url.Decode(prop.Value.GetString());
                    break;

                case DQPropertyName:
                    DQ = Base64Url.Decode(prop.Value.GetString());
                    break;

                case QIPropertyName:
                    QI = Base64Url.Decode(prop.Value.GetString());
                    break;

                case PPropertyName:
                    P = Base64Url.Decode(prop.Value.GetString());
                    break;

                case QPropertyName:
                    Q = Base64Url.Decode(prop.Value.GetString());
                    break;

                case XPropertyName:
                    X = Base64Url.Decode(prop.Value.GetString());
                    break;

                case YPropertyName:
                    Y = Base64Url.Decode(prop.Value.GetString());
                    break;

                case DPropertyName:
                    D = Base64Url.Decode(prop.Value.GetString());
                    break;

                case KPropertyName:
                    K = Base64Url.Decode(prop.Value.GetString());
                    break;

                case TPropertyName:
                    T = Base64Url.Decode(prop.Value.GetString());
                    break;
                }
            }
        }