【问题标题】:Creating and filling data for json为 json 创建和填充数据
【发布时间】:2019-08-07 04:58:55
【问题描述】:

所以...我得到了以下两个用于 json 文件的类

    public class Scorebot
    {
        public string Messagedata { get; set; }
        public string CurrentScoreCt { get; set; }
        public string CurrentScoreT { get; set; }
        public string TeamNameCt { get; set; }
        public string TeamNameT { get; set; }
        public Players[] PlayersCt { get; set; }
        public Players[] PlayersT { get; set; }
    }

    public class Players
    {
        public string Nickname { get; set; }
        public string Weapon { get; set; }
        public string Health { get; set; }
        public string Armor { get; set; }
        public string Money { get; set; }
        public string Adr { get; set; }
        public string Kills { get; set; }
        public string Assists { get; set; }
        public string Deaths { get; set; }
    } 

下面的 json 应该是这样的:

{
  "messagedata": "kyoto killed SEGADOBR",
  "currentscoreCT": "10",
  "currentscoreT": "10",
  "teamnameCT": "CT",
  "teamnameT": "T",
  "playersCT": [
            {
              "Nickname": "SEGADOBR",
              "Weapon": "ak47",
              "Health": "100",
              "Armor": "100",
              "Money": "16000",
              "ADR": "13.6",
              "Kills": "16",
              "Assists": "5",
              "Deaths": "18"
            }
  ],
  "playersT": [
            {
              "Nickname": "kyoto",
              "Weapon": "ak47",
              "Health": "100",
              "Armor": "100",
              "Money": "16000",
              "ADR": "13.6",
              "Kills": "999",
              "Assists": "5",
              "Deaths": "18"
            }
  ]     
}

我了解如何访问变量(Messagedata、CurrentScoreCt、CurrentScoreT、TeamNameCt 和 TeamNameT)。但是我应该怎么做才能填充这个(Players [] PlayersCt,Players [] PlayersT)中的元素,如何正确访问它们?

据我了解应该是这样的

Scorebot.PlayersCt[i].Nickname = "something"

但它没有用。怎么做?

【问题讨论】:

  • But it didn't work. 是什么意思?你面临什么问题?您是尝试从类对象创建 json 还是从 json 创建对象?
  • 当我启动程序时,我得到了System.NullReferenceException: Object reference not set to an instance of an object.,并带有以下代码Scorebot.PlayersT = new Players[5]; Scorebot.PlayersCt = new Players[5]; for (var i = 0; i < 5; i++) { Scorebot.PlayersCt[i].Nickname = "Noone"; } for (var i = 0; i < 5; i++) { Scorebot.PlayersT[i].Nickname = "Noone"; }
  • @Nicerok1 你有没有初始化这些变量/数组?我猜不是。引用类型将默认为 null,直到您为其赋值。
  • 我正在尝试从“Scorebot”类创建 json,它一直有效,直到我开始尝试填充数组 PlayersT 和 PlayersCt

标签: c# arrays json class json.net


【解决方案1】:

你可以这样填写你的对象:

var scoreBot = new Scorebot
{
    Messagedata = "kyoto killed SEGADOBR",
    CurrentScoreCt = "10",
    CurrentScoreT = "10",
    TeamNameCt = "CT",
    TeamNameT = "T",
    PlayersCt = new Players[]
    {
        new Players
        {
            Nickname = "SEGADOBR",
            Weapon = "ak47",
            Health = "100",
            Armor = "100",
            Money = "16000",
            Adr = "13.6",
            Kills = "16",
            Assists = "5",
            Deaths = "18"
        }
    },
    PlayersT = new Players[]
    {
        new Players
        {
            Nickname = "kyoto",
            Weapon = "ak47",
            Health = "100",
            Armor = "100",
            Money = "16000",
            Adr = "13.6",
            Kills = "999",
            Assists = "5",
            Deaths = "18"
        }
    }
};

然后您可以使用Newtonsoft.Json 简单地将其转换为 JSON:

var jsonScoreBot = JsonConvert.SerializeObject(scoreBot);

Console.WriteLine(jsonScoreBot);
// {"Messagedata":"kyoto killed SEGADOBR","CurrentScoreCt":"10","CurrentScoreT":"10","TeamNameCt":"CT","TeamNameT":"T","PlayersCt":[{"Nickname":"SEGADOBR","Weapon":"ak47","Health":"100","Armor":"100","Money":"16000","Adr":"13.6","Kills":"16","Assists":"5","Deaths":"18"}],"PlayersT":[{"Nickname":"kyoto","Weapon":"ak47","Health":"100","Armor":"100","Money":"16000","Adr":"13.6","Kills":"999","Assists":"5","Deaths":"18"}]}

现在您也可以简单地调用scoreBot.PlayersCt[i].Nickname = "Noone" 来更新对象。请注意PlayersCt 中只存在一个元素,因此i 必须为0 以避免System.IndexOutOfRangeException

【讨论】:

  • 谢谢!但我还有一些问题。我会给你写一封电子邮件,所以你能在你的空闲时间帮助我吗?
  • @Nicerok11 你可以在这里提问。我很乐意为您提供更多帮助,只要它仍然与问题相关。
【解决方案2】:

我对 Scorebot 做了一些改动 不要使用数组,而是使用通用列表。

public class Scorebot
    {
        public string Messagedata { get; set; }
        public string CurrentScoreCt { get; set; }
        public string CurrentScoreT { get; set; }
        public string TeamNameCt { get; set; }
        public string TeamNameT { get; set; }
        public List<Players> PlayersCt { get; set; }
        public List<Players> PlayersT { get; set; }
    }

    public class Players
    {
        public string Nickname { get; set; }
        public string Weapon { get; set; }
        public string Health { get; set; }
        public string Armor { get; set; }
        public string Money { get; set; }
        public string Adr { get; set; }
        public string Kills { get; set; }
        public string Assists { get; set; }
        public string Deaths { get; set; }
    } 

然后只需创建一个 Scorebot 的对象以及玩家类 喜欢

Scorebot objModel = new Scorebot();
List<Players> PlayersCt = new List<Players>();
List<Players> Playersst = new List<Players>();

在这些对象中动态填充您想要的数据。 那么

objModel.PlayersCt = PlayersCt ;
objModel.Playersst = Playersst ;

然后最后将该对象转换为 JSON 字符串,如

var jsonScoreBot = JsonConvert.SerializeObject(objModel);

【讨论】:

  • 谢谢!但是我应该如何将数据填充到该列表中?所以我需要在列表中创建一个新玩家,然后填写属性(昵称等)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-20
  • 1970-01-01
  • 2012-07-16
  • 1970-01-01
  • 2015-02-04
  • 1970-01-01
相关资源
最近更新 更多