如何将带动态变量的JSON反序列化为类

时间:2018-01-22 23:05:19

标签: c# json

我有一个JSON文件,每行都有不同的变量。

示例:

{"Id":1,"Name":"John","Age":34}
{"Id":2,"Name":"Peter","Married":"Yes"}

如果我定义一个类:

class Employee
{
    Id Int64 {get ;set ;} 
    Name string {get ;set ;}
    Age Int64 {get ;set ;}
}

如果我使用语句

,如何将JSON反序列化为对象员工
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

employee = JsonConvert.DeserializeObject<Employee>(serialized);

如何解释我在课堂上没有定义的动态变量?

2 个答案:

答案 0 :(得分:1)

如果您事先不知道这些属性,可以直接序列化为Dictionary<string, string>。例如:

var json = @"{""Id"":2,""Name"":""Peter"",""Married"":""Yes""}";
var dictionary = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);

foreach (var element in dictionary)
{
    Console.WriteLine($"Key: {element.Key}, Value: {element.Value}");
}

输出将是:

Key: Id, Value: 2
Key: Name, Value: Peter
Key: Married, Value: Yes

答案 1 :(得分:0)

首先,我要指出,拥有未知属性的对象毫无意义。您将如何在其余代码中使用此类对象?如果您希望我们帮助您找到合适的解决方案,您可以解释如何处理这些对象。

话虽如此,您可以创建一个包含所有可能属性的类,并使所有这些属性都可以为空。在您的示例中,它可以是:

class Employee {
    int Id { get; set; } 
    string Name { get; set; }
    int? Age { get; set; }
    bool? Married { get; set; }
}

注意:我假设Id始终存在,所以我没有让它可以为空,Married是布尔值true / false,而不是你的例子中的yes / no