C#为JSON序列化和反序列化创建.NET对象

X3n*_*ntr 7 c# json

我正在为C#中的twitch chat bot开发一个点系统.我需要将点数和小时数的用户列表保存到本地.txt文件中,如下所示:

  • 用户:???
    • 用户名 : ???
      • 尼克:字符串
      • 要点:int
      • 小时:int
    • 用户名 : ???
      • 尼克:字符串
      • 要点:int
      • 小时:int
    • 用户名 : ???
      • 尼克:字符串
      • 要点:int
      • 小时:int

我正在尝试创建一个.NET对象来序列化为一个JSON字符串并将其写入我的.txt文件,但我被困在这里.

我认为用户需要是某种类型的数组,但我如何处理用户名?我不认为JSON支持自定义类型?

谢谢你的时间,X3ntr

Flo*_*aal 12

首先,我们需要创建一个模型.该模型需要匹配JSON的结构.有几种方法可以创建此模型.

可能最好和最安全的方法是手工编写.如果您使用的是vs2015,您还可以复制json并将其粘贴为类.

你可以在这里找到这个选项: 在此输入图像描述

另一种选择是使用像http://json2csharp.com/这样的网站,你可以粘贴JSON,这也会为你的JSON生成类.请记住,这些生成器并非100%准确,因此您可能需要更改自己的某些属性.

我们得到了模型,我们可以使用像JSON.net这样的lib 来反序列化我们的JSON.在网站上还有一些关于如何使用JSON.net的额外文档

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

请记住,如果您错过了模型中的属性,则不会总是抛出错误.因此,请确保所有属性都正确序列化.

序列化就像反序列化一样简单.

string json = JsonConvert.SerializeObject(model);
File.WriteAllText("C:\json.txt",json); 
Run Code Online (Sandbox Code Playgroud)

可选是在编写json时添加编码.

File.WriteAllText("C:\json.txt",json,Encoding.UTF8);
Run Code Online (Sandbox Code Playgroud)

  • 编辑 - >贴特别棒!不知道那个. (3认同)

Gra*_*ood 7

我会小心翼翼的.

首先,我们需要为用户提供一个模型:

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; }
}
Run Code Online (Sandbox Code Playgroud)

然后在您的主要方法中,或在您与用户打交道的任何地方:

List<User> users = new List<User>();
Run Code Online (Sandbox Code Playgroud)

请注意,我添加了Id属性.即使你的用户名很可能是独一无二的,但总有一种好的做法是拥有某种属性,其整个工作就是成为Id.此属性永远不会在用户的整个生命周期中更改.如果用户名可能会在某一天发生变化,则ID将始终保持不变.

无论如何,现在把你的名单变成Json:

string myJsonString = JsonConvert.SerializeObject(users, Formatting.Indented);
Run Code Online (Sandbox Code Playgroud)

瞧瞧!您的用户列表现在是一个整洁的Json字符串.上面的代码行来自JSON.NET,你可以把它作为Nuget包.完整的资格是Newtonsoft.Json.JsonConvert.您几乎可以信任JSON.NET来处理几乎所有内容,特别是对于一个简单的User类,就像您将要抛出它一样.

希望这有助于您入门.