Десериализация JSON класса с несколькими объектами разных типов - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь десериализовать следующий вывод строки в json в csharp.

Теперь проблема в том, что есть несколько объектов, к которым я не знаю, как получить доступ. Моей конечной целью было бы получить доступ, например, только к объекту подергивания.

Как должен выглядеть мой Jsonclass? Заранее спасибо.

[
    {
        "type": "battlenet",
        "id": "zzzz#25589",
        "name": "zzzz#25589",
        "visibility": 1,
        "friend_sync": false,
        "show_activity": true,
        "verified": true
    },
    {
        "type": "steam",
        "id": "45356364364564",
        "name": "zzzz",
        "visibility": 1,
        "friend_sync": false,
        "show_activity": true,
        "verified": true
    },
    {
        "type": "twitch",
        "id": "4353454353453",
        "name": "zzzzz",
        "visibility": 1,
        "friend_sync": false,
        "show_activity": true,
        "verified": true
    },
    {
        "type": "youtube",
        "id": "xxxxx-xxxxxx",
        "name": "Salt",
        "visibility": 1,
        "friend_sync": false,
        "show_activity": true,
        "verified": true
    }
]

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Возможно, я сейчас на неправильном пути,

, но так как они имеют все те же атрибуты, почему бы вам не попробовать реализовать интерфейс / суперкласс и использовать Reflection, чтобы получить правильный тип в соответствии с в значение «type»?

Чтобы получить экземпляр:

public object GetInstance(string typeString)
{         
     Type t = Type.GetType(typeString); 
     return  Activator.CreateInstance(t);         
}
0 голосов
/ 24 марта 2020

Здесь у вас есть JSON массив объектов. Вы должны разобрать его в массив или список:

Ваш объект:

public class SomeObject
{
    [JsonProperty("type")]
    public string Type { get; set; }

    [JsonProperty("id")]
    public string Id { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("visibility")]
    public int Visibility { get; set; }

    [JsonProperty("friend_sync")]
    public bool FriendSync { get; set; }

    [JsonProperty("show_activity")]
    public bool ShowActivity { get; set; }

    [JsonProperty("verified")]
    public bool Verified { get; set; }
}

Синтаксический анализ: var resultList = JsonConvert.DeserializeObject<List<SomeObject>>(jsonstring);

Затем просто найдите объект twitch :

resultList.FirstOrDefault(x=>x.type == "twitch")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...