2016-05-13 4 views
6

Я работаю над точечной системой для моего боттового бота в C#. Мне нужно сохранить список пользователей с их количеством точек и часов в локальный файл .txt следующим образом:C# Создайте объект .NET для сериализации и десериализации JSON

  • пользователей: ???
    • имя пользователя: ???
      • ник: строка
      • точки: Int
      • часов: INT
    • имя: ???
      • ник: строка
      • точки: Int
      • часов: INT
    • имя: ???
      • ник: строка
      • точки: Int
      • часов: ИНТ

Я пытаюсь создать .NET Object сериализовать в строку JSON и написать это в мой .txt файл, но я застрял здесь.

Я полагаю, что пользователям нужен какой-то массив, но что мне делать с именем пользователя? Я не думаю, что JSON поддерживает пользовательские типы?

Спасибо за ваше время, X3ntr

+0

Как правило, модели данных и писать свои классы, то формат Json следует из (вы также можете принять правильно отформатирован Json и создавать классы, модели, что данные). – crashmstr

ответ

5

Сначала нам нужно создать модель. Эта модель должна соответствовать структуре JSON. Существует несколько способов создать эту модель.

Возможно, лучший и безопасный способ написать его вручную. Если вы используете vs2015, вы также можете скопировать json и вставить его как класс.

Вы можете найти эту опцию здесь: enter image description here

Другой вариант заключается в использовании веб-сайта, как http://json2csharp.com/ здесь вы можете вставить JSON, и это также будет генерировать классы для JSON. Имейте в виду, что этот генератор не на 100% точнее, поэтому вам может потребоваться изменить некоторые свойства.

Мы получили модель, которую мы можем использовать как JSON.net для десериализации нашего JSON. На сайте также некоторые дополнительные документы о том, как использовать Json.NET

var userList = JsonConvert.DeserializeObject<List<UserModel>>(users); //Users being the json as text. 

Помните, что если вы пропустите недвижимость в вас эта модель не всегда выдаст ошибку. Поэтому убедитесь, что все свойства правильно сериализованы.

Сериализация - это просто, как десериализация.

string json = JsonConvert.SerializeObject(model); 
File.WriteAllText("C:\json.txt",json); 

Опция добавляет кодировку при записи json.

File.WriteAllText("C:\json.txt",json,Encoding.UTF8); 
+0

Редактировать -> Вставить специальные удивительные! Не знал этого. –

6

Я возьму выстрел в него.

Сначала нам нужна модель для нашего пользователя:

public class User 
{ 
    public Guid Id { get; set; } 
    public string Username { get; set; } 
    public string NickName { get; set; } 
    public int Points { get ;set; } 
    public int Hours { get; set; } 
} 

Затем в основной метод, или везде, где вы имеете дело с пользователями:

List<User> users = new List<User>(); 

Обратите внимание, что Я добавил свойство Id. Даже несмотря на то, что ваши имена пользователей могут быть уникальными, всегда хорошая практика иметь какое-то свойство, вся работа которого должна быть только Id. Это свойство никогда не должно меняться в течение всего срока службы пользователя. Если имя пользователя может измениться в один день, идентификатор всегда останется прежним.

В любом случае, теперь, чтобы превратить ваш список в Json:

string myJsonString = JsonConvert.SerializeObject(users, Formatting.Indented); 

вуаля! Теперь ваш список пользователей находится в аккуратной строке Json. Вышеприведенная строка кода от JSON.NET, вы можете получить ее как a Nuget package. Полная квалификация - Newtonsoft.Json.JsonConvert. Вы можете очень доверять JSON.NET, чтобы обрабатывать почти все, что вы бросаете на него, особенно для простого класса User, как будто вы собираетесь его бросать.

Надеюсь, это поможет вам начать работу.

Смежные вопросы