从包含 2 个对象的 json 文件下载列表值
Download values of list from json file with 2 objects
我想创建简单的游戏,我需要从 json 获取值或更改它们。
我有 3 类.
public class Person
{
public string Specjality { get; set; }
public int PWZ { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public List<string> Items { get; set; }
}
public class Monster
{
public string Name { get; set; }
public List<string> Skills { get; set; }
}
public class Root
{
public List<Person> people { get; set; }
public List<Monster> monsters { get; set; }
}
Json 文件
{
"Person": [
{
"Speciality": "Archer",
"PWZ": 432742,
"Name": "Charlie",
"Surname": "Evans",
"Items": [
"Bow",
"Arrow",
]
},
{
"Speciality": "Soldier",
"PWZ": 432534879,
"Name": "Harry",
"Surname": "Thomas",
"Items": [
"Gun",
"Knife",
]
}
],
"Monster": [
{
"Name": "Papua",
"Skills": [
"Jump",
"SlowWalk",
]
},
{
"Name": "Geot",
"Skills": [
"Run",
"Push",
]
}
]
}
我的第一个问题是如何反序列化它,接下来如何在屏幕上打印选定的值(例如第一个怪物的技能)以及如何更改一些值(例如将“跳跃”从怪物技能更改为“传送” " 或更改人名)。感谢大家的回答。
你非常接近。要反序列化,请更新以下内容:
- Update/fix spelling/typo 在
Person
class
public string Speciality { get; set; }
- 更新
Root
属性 名称(名称应与 Json 匹配):
public class Root
{
public List<Person> Person { get; set; }
public List<Monster> Monster { get; set; }
}
- 反序列化为
Root
class:
var result = JsonSerializer.Deserialize<Root>(json);
现在,Json 字符串中的尾随逗号也存在问题。我收到此错误:
The JSON array contains a trailing comma at the end which is not
supported in this mode. Change the reader options.
您可以修复 Json 字符串(删除数组中的尾随逗号),或者如果您使用 System.Text.Json 反序列化,您可以应用 AllowTrailingCommas
选项:
var options = new JsonSerializerOptions { AllowTrailingCommas = true };
var result = JsonSerializer.Deserialize<Root>(json, options);
要显示值:
// iterate over Person/Monster collection
foreach (var person in result.Person)
Console.WriteLine($"Name: {person.Name}, Items: {string.Join(", ", person.Items)}");
foreach (var monster in result.Monster)
Console.WriteLine($"Name: {monster.Name}, Skills: {string.Join(", ", monster.Skills)}");
要修改 项目,您只需修改Person
或Monster
实例,然后再次序列化:
// update name:
result.Person[0].Name = "Alan";
// serialize if you need to:
string json = JsonSerializer.Serialize(result);
我想创建简单的游戏,我需要从 json 获取值或更改它们。 我有 3 类.
public class Person
{
public string Specjality { get; set; }
public int PWZ { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public List<string> Items { get; set; }
}
public class Monster
{
public string Name { get; set; }
public List<string> Skills { get; set; }
}
public class Root
{
public List<Person> people { get; set; }
public List<Monster> monsters { get; set; }
}
Json 文件
{
"Person": [
{
"Speciality": "Archer",
"PWZ": 432742,
"Name": "Charlie",
"Surname": "Evans",
"Items": [
"Bow",
"Arrow",
]
},
{
"Speciality": "Soldier",
"PWZ": 432534879,
"Name": "Harry",
"Surname": "Thomas",
"Items": [
"Gun",
"Knife",
]
}
],
"Monster": [
{
"Name": "Papua",
"Skills": [
"Jump",
"SlowWalk",
]
},
{
"Name": "Geot",
"Skills": [
"Run",
"Push",
]
}
]
}
我的第一个问题是如何反序列化它,接下来如何在屏幕上打印选定的值(例如第一个怪物的技能)以及如何更改一些值(例如将“跳跃”从怪物技能更改为“传送” " 或更改人名)。感谢大家的回答。
你非常接近。要反序列化,请更新以下内容:
- Update/fix spelling/typo 在
Person
classpublic string Speciality { get; set; }
- 更新
Root
属性 名称(名称应与 Json 匹配):public class Root { public List<Person> Person { get; set; } public List<Monster> Monster { get; set; } }
- 反序列化为
Root
class:var result = JsonSerializer.Deserialize<Root>(json);
现在,Json 字符串中的尾随逗号也存在问题。我收到此错误:
The JSON array contains a trailing comma at the end which is not supported in this mode. Change the reader options.
您可以修复 Json 字符串(删除数组中的尾随逗号),或者如果您使用 System.Text.Json 反序列化,您可以应用 AllowTrailingCommas
选项:
var options = new JsonSerializerOptions { AllowTrailingCommas = true };
var result = JsonSerializer.Deserialize<Root>(json, options);
要显示值:
// iterate over Person/Monster collection
foreach (var person in result.Person)
Console.WriteLine($"Name: {person.Name}, Items: {string.Join(", ", person.Items)}");
foreach (var monster in result.Monster)
Console.WriteLine($"Name: {monster.Name}, Skills: {string.Join(", ", monster.Skills)}");
要修改 项目,您只需修改Person
或Monster
实例,然后再次序列化:
// update name:
result.Person[0].Name = "Alan";
// serialize if you need to:
string json = JsonSerializer.Serialize(result);