Не могу создать правильный класс для серилизации Json

100
12 сентября 2019, 05:00

После того как я написал код который работал правильно, выводил серилизованную строку в формате json, я сохранил его и добавил комментарии. После повторной компиляции программы код уже не работает. На выходе получаю строку:

[{}]

Должна быть:

[
  {
    "operationName": "ChannelPage_SetSessionStatus",
    "variables": {
      "input": {
        "sessionID": "fa073306f9e05288",
        "availability": "ONLINE",
        "activity": {
          "type": "WATCHING",
          "userID": "37402112",
          "gameID": null
        }
      }
    },
    "extensions": {
      "persistedQuery": {
        "version": 1,
        "sha256Hash": "8521e08af74c8cb5128e4bb99fa53b591391cb19492e65fb0489aeee2f96947f"
      }
    }
  },
  {
    "operationName": "ChannelPage_StreamType_User",
    "variables": {
      "channelLogin": "shroud"
    },
    "extensions": {
      "persistedQuery": {
        "version": 1,
        "sha256Hash": "43b152e4f17090ece0b50a5bc41e4690c7a6992ad3ed876d88bf7292be2d2cba"
      }
    }
  }
]

Класс который серилизую:

public class TwitchStream
{
    internal class TwitchSetSessionStatus
    {
        public string operationName = "ChannelPage_SetSessionStatus"; // название метода
        internal class variables
        {
            internal class input
            {
                public string sessionID = "fa073306f9e05288"; // можно узнать из куков
                public string availability = "ONLINE"; // статус аккаунта онлайн, отошёл или невидимка
                internal class activity
                {
                    public string type = "WATCHING"; // что делаешь
                    public int userID = 37402112; // id стримера которого смотришь
                    public string gameID = null; // пока что не увидел что б она хоть где-то не null была
                }
            }
        }
        internal class extensions
        {
            internal class persistedQuery
            {
                public int version = 1; // версия Query, я так понял
                public string sha256Hash = "8521e08af74c8cb5128e4bb99fa53b591391cb19492e65fb0489aeee2f96947f"; // привязана к operationName
            }
        }
    }
    internal class TwitchStreamTypeUser
    {
        public string operationName = "ChannelPage_StreamType_User";
        internal class variables
        {
            public string channelLogin = "shroud"; // не изменяется на сервере, лучше писать правильное значение
        }
        internal class extensions
        {
            internal class persistedQuery
            {
                public int version = 1; // версия Query, я так понял
                public string sha256Hash = "43b152e4f17090ece0b50a5bc41e4690c7a6992ad3ed876d88bf7292be2d2cba"; // привязана к operationName
            }
        }
    }
}

Теперь класс выглядит так:

public class TwitchStreams
{
    public TwitchSetSessionStatus twitchSetSessionStatus = new TwitchSetSessionStatus();
    public TwitchStreamTypeUser twitchStreamTypeUser = new TwitchStreamTypeUser();
    public class TwitchSetSessionStatus
    {
        public string operationName = "ChannelPage_SetSessionStatus"; // название метода
        public Variables variables = new Variables();
        public Extensions extensions = new Extensions();
        public class Variables
        {
            public Input input = new Input();
            public class Input
            {
                public string sessionID = "fa073306f9e05288"; // можно узнать из куков
                public string availability = "ONLINE"; // статус аккаунта онлайн, отошёл или невидимка
                public Activity activity = new Activity();
                public class Activity
                {
                    public string type = "WATCHING"; // что делаешь
                    public int userID = 37402112; // id стримера которого смотришь
                    public string gameID = null; // пока что не увидел что б она хоть где-то не null была
                }
            }
        }
        public class Extensions
        {
            public PersistedQuery persistedQuery = new PersistedQuery();
            public class PersistedQuery
            {
                public int version = 1; // версия Query, я так понял
                public string sha256Hash = "8521e08af74c8cb5128e4bb99fa53b591391cb19492e65fb0489aeee2f96947f"; // привязана к operationName
            }
        }
    }
    public class TwitchStreamTypeUser
    {
        public string operationName = "ChannelPage_StreamType_User";
        public Variables variables = new Variables();
        public Extensions extensions = new Extensions();
        public class Variables
        {
            public string channelLogin = "shroud"; // не изменяется на сервере, лучше писать правильное значение
        }
        public class Extensions
        {
            public PersistedQuery persistedQuery = new PersistedQuery();
            public class PersistedQuery
            {
                public int version = 1; // версия Query, я так понял
                public string sha256Hash = "43b152e4f17090ece0b50a5bc41e4690c7a6992ad3ed876d88bf7292be2d2cba"; // привязана к operationName
            }
        }
    }
}

И Json так:

[
  {
    "twitchSetSessionStatus": {
      "operationName": "ChannelPage_SetSessionStatus",
      "variables": {
        "input": {
          "sessionID": "fa073306f9e05288",
          "availability": "ONLINE",
          "activity": {
            "type": "121",
            "userID": 37402112,
            "gameID": null
          }
        }
      },
      "extensions": {
        "persistedQuery": {
          "version": 1,
          "sha256Hash": "8521e08af74c8cb5128e4bb99fa53b591391cb19492e65fb0489aeee2f96947f"
        }
      }
    },
    "twitchStreamTypeUser": {
      "operationName": "ChannelPage_StreamType_User",
      "variables": {
        "channelLogin": "shroud"
      },
      "extensions": {
        "persistedQuery": {
          "version": 1,
          "sha256Hash": "43b152e4f17090ece0b50a5bc41e4690c7a6992ad3ed876d88bf7292be2d2cba"
        }
      }
    }
  }
]

Как мне убрать название переменных на 3-ий и 23-ий строке?

Answer 1

Еще раз. Не в значениях, которые Вы добавили в код вопроса, дело.

Давайте разберемся. Возьмем класс TwitchStreamTypeUser. У объекта этого типа есть поле operationName, и больше ничего.

internal class TwitchStreamTypeUser
{
    public string operationName = "ChannelPage_StreamType_User";
    internal class variables
    {
        public string channelLogin = "shroud"; // не изменяется на сервере, лучше писать правильное значение
    }
    internal class extensions
    {
        internal class persistedQuery
        {
            public int version = 1; // версия Query, я так понял
            public string sha256Hash = "43b152e4f17090ece0b50a5bc41e4690c7a6992ad3ed876d88bf7292be2d2cba"; // привязана к operationName
        }
    }
}

Да, внутри него есть два другие типа/класса, но полей/свойств такого типа у TwitchStreamTypeUser нет.

Измените класс TwitchStreamTypeUser:

internal class TwitchStreamTypeUser
{
    public string operationName = "ChannelPage_StreamType_User";
    public variables variables = new variables();
    public extensions extensions = new extensions();
    internal class variables
    {
        public string channelLogin = "shroud"; // не изменяется на сервере, лучше писать правильное значение
    }
    internal class extensions
    {
        public persistedQuery persistedQuery = new persistedQuery();
        internal class persistedQuery
        {
            public int version = 1; // версия Query, я так понял
            public string sha256Hash = "43b152e4f17090ece0b50a5bc41e4690c7a6992ad3ed876d88bf7292be2d2cba"; // привязана к operationName
        }
    }
}

И аналогично, остальные классы.

Как мне убрать название переменных на 3-ий и 23-ий строке?

Мы идем вперед семимильными шагами ).

Кроме названий придется убрать и лишние фигурные скобки.

Поместите эти два объекта в массив object[] или список List<object> и сериализуйте этот контейнер.

READ ALSO
Не отправляется письмо на почту при регистрации

Не отправляется письмо на почту при регистрации

Написал регистрацию пользователей на сайте, но при нажатии на кнопку зарегистрироваться, появляется ошибка "Ошибка при отправлении письма...

100
Заменить site.ru/images/14172/1.jpg на site.ru/img/01-02-2019/1.jpg

Заменить site.ru/images/14172/1.jpg на site.ru/img/01-02-2019/1.jpg

Как заменить images/14172/ на img/01-02-2019/

89
php object to array

php object to array

Этот вопрос мусолился не раз, но все же, вот с чем столкнулся

114
Проблема с активацией почты

Проблема с активацией почты

Написал регистрацию и активацию почты пользователей на сайтеНа почту приходит письмо с ссылкой, по который нужно перейти, чтобы активировать...

130