将 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 个参数而不是只有 nameage,那么 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
}