将 Json 直接导入 class
Importing Json directly into class
我想将 Json 文件导入 class
这是我的玩具Json文件
{
"a": {
"Name": "foo",
"Age": 2
},
"b": {
"Name": "bar",
"Age": 3
}
}
我使用以下代码在 class 参数中导入 Json 文件。
然后我用这个信息创建了两个人,a和b
public class Params
{
JObject m_params;
Params()
{
using (StreamReader file = File.OpenText(filename))
using (JsonTextReader reader = new JsonTextReader(file))
{
m_params = (JObject)JToken.ReadFrom(reader);
}
Person Person1 = new Person(m_params["a"]);
Person Person2 = new Person(m_params["b"]);
}
}
下面是 Person
的实现
public class Person
{
string Name;
int Age;
Person(JToken data)
{
Name = data["Name"];
Age = data["Age"];
}
}
这行得通,但我觉得这样做应该更简单。
如果我有 100 个参数而不是只有 name
和 age
,那么 Person 的初始化将是 100 行代码。
是否有直接将数据["Name"] 赋值给Person.Name 并为Person 的所有参数做其余的方法?
如何改进我的导入,以便当我有很多人有很多字段时我可以轻松导入所有内容?
您可以像这样直接反序列化对象:
public class Params
{
Person a;
Person b;
}
public class Person
{
string Name;
int Age;
}
var jsonText = File.ReadAllText("config.json");
var people = JsonSerializer.Deserialize<Params>(jsonText);
您似乎在使用 Newtonsoft.JSON NuGet-Package。
如果是这样,有一个JsonConvert
-Class公开了DeserializeObject<T>
-方法来存档它。
这里的棘手之处在于您的人物包含在字典中,因此以下代码应该适合您:
public class Params
{
Params()
{
string json = File.ReadAllText(filename);
var dictionary = JsonConvert.DeserializeObject<Dictionary<string, Person>>(json);
var person1 = dictionary["a"];
var person2 = dictionary["b"];
}
}
public class Person
{
string Name;
int Age;
// Remove the constructor or add a parameterless one
}
我想将 Json 文件导入 class
这是我的玩具Json文件
{
"a": {
"Name": "foo",
"Age": 2
},
"b": {
"Name": "bar",
"Age": 3
}
}
我使用以下代码在 class 参数中导入 Json 文件。 然后我用这个信息创建了两个人,a和b
public class Params
{
JObject m_params;
Params()
{
using (StreamReader file = File.OpenText(filename))
using (JsonTextReader reader = new JsonTextReader(file))
{
m_params = (JObject)JToken.ReadFrom(reader);
}
Person Person1 = new Person(m_params["a"]);
Person Person2 = new Person(m_params["b"]);
}
}
下面是 Person
的实现public class Person
{
string Name;
int Age;
Person(JToken data)
{
Name = data["Name"];
Age = data["Age"];
}
}
这行得通,但我觉得这样做应该更简单。
如果我有 100 个参数而不是只有 name
和 age
,那么 Person 的初始化将是 100 行代码。
是否有直接将数据["Name"] 赋值给Person.Name 并为Person 的所有参数做其余的方法?
如何改进我的导入,以便当我有很多人有很多字段时我可以轻松导入所有内容?
您可以像这样直接反序列化对象:
public class Params
{
Person a;
Person b;
}
public class Person
{
string Name;
int Age;
}
var jsonText = File.ReadAllText("config.json");
var people = JsonSerializer.Deserialize<Params>(jsonText);
您似乎在使用 Newtonsoft.JSON NuGet-Package。
如果是这样,有一个JsonConvert
-Class公开了DeserializeObject<T>
-方法来存档它。
这里的棘手之处在于您的人物包含在字典中,因此以下代码应该适合您:
public class Params
{
Params()
{
string json = File.ReadAllText(filename);
var dictionary = JsonConvert.DeserializeObject<Dictionary<string, Person>>(json);
var person1 = dictionary["a"];
var person2 = dictionary["b"];
}
}
public class Person
{
string Name;
int Age;
// Remove the constructor or add a parameterless one
}