我有一个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);
如何解释我在课堂上没有定义的动态变量?
答案 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
。