Comment faire pour convertir en JSON à la liste de chaîne, lorsque certains des objets JSON sont de chaîne et certains sont ensemble?

Mon JSON ressemble

{
"d": {
"__type": "CubeJsonData",
"SessionID": null,
"Code": 0,
"Message": "",
"Rows": {},
"Columns": {
  "Place 1": [
    0,
    1
  ],
  "Place 2": [
    0,
    2,
    4,
    6
  ],
},
"Set": [
  [
    "Number 1"
  ],
  [
    "Number 2"
  ],
  [
    "Number 3"
  ]
]
}
}

J'ai besoin d'obtenir les valeurs suivantes

List<string> Columns must contain: "Place 1", "Place 2"
List<string> Set must contain: "Number 1", "Number 2", "Number 3"

Mon interlocuteur est

var settings = new JsonSerializerSettings();
settings.Converters.Add(new AssosiativeArrayConverter());
var staffAlerts = JsonConvert.DeserializeObject<List<AlertDetails>>(jo.ToString(), settings);

Mon JsonConverter est

class AssosiativeArrayConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return (objectType == typeof(string)) || (objectType == typeof(List<string>));
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        if (reader.TokenType == JsonToken.StartArray)
        {
            var l = new List<string>();
            reader.Read();
            while (reader.TokenType != JsonToken.EndArray)
            {
                l.Add(reader.Value as string);

                reader.Read();
            }
            return l;
        }
        else
        {
            return new List<string> { reader.Value as string };
        }
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {//to do
    }
}

Ma classe est

class StaffDetail
{
    public string __type { get; set; }
    public string SessionID { get; set; }
    public string Code { get; set; }
    public string Message { get; set; }

    [JsonConverter(typeof(AssosiativeArrayConverter))]
    public List<string> Rows { get; set; }
    [JsonConverter(typeof(AssosiativeArrayConverter))]
    public List<string> Columns { get; set; }
    [JsonConverter(typeof(AssosiativeArrayConverter))]
    public List<string> Set { get; set; }
}

J'obtiens une erreur

Ne peut pas désérialiser l'actuel objet JSON (par exemple, {"name":"valeur"}) dans le " type de Système.Les Collections.Génériques.Liste`1[ReportingServicesAlerts.AlertDetails] " parce que le type requiert un tableau JSON (par exemple, [1,2,3]) pour désérialiser correctement.
Pour corriger cette erreur soit modifier le JSON d'un tableau JSON (par exemple, [1,2,3]) ou de modifier le désérialisé type de sorte qu'il est normal .NET type (par exemple, pas un type primitif comme entier, pas un type de collection comme un tableau ou une Liste) qui peut être désérialisé à partir d'un objet JSON. JsonObjectAttribute peuvent également être ajoutés à la type pour le forcer à désérialiser à partir d'un objet JSON.

Pouvez-vous m'aider à comprendre ce que je fais mal?

  • tout d'abord, vous avez eu une erreur dans votre json, juste avant "et" il ne devrait pas être délimité par des virgules là, je vais essayer moi-même dans un tout en travaillant sur elle 🙂 ... mais je crois que vous devriez être en mesure de le faire sans tout ce code ...
  • CORRECTION 🙂 ... 2 vit au-dessus de "Définir"
InformationsquelleAutor Raii | 2013-11-21