我正在尝试将一串JSON数据转换为C#类对象。但是我遇到了JSON的一小部分问题,它本质上是动态的。
JSON的部分如下:
"contact": [{
"comment": null,
"type": {
"id": "cell",
"name": "Example name"
},
"preferred": true,
"value": {
"country": "7",
"formatted": "+7 (702) 344-3423-3",
"number": "3498908",
"city": "702"
}
},
{
"type": {
"id": "email",
"name": "Email example"
},
"preferred": false,
"value": "name@mail.com"
}]
C#班
public class Value
{
public string country { get; set; }
public string formatted { get; set; }
public string number { get; set; }
public string city { get; set; }
}
public class Type
{
public string id { get; set; }
public string name { get; set; }
}
public class Contact
{
public string comment { get; set; }
public Type type { get; set; }
public bool preferred { get; set; }
public string value { get; set; }
}
C#代码
Contact contact = JsonConvert.DeserializeObject<Contact>(result);
“值”的格式根据联系信息而变化。是否可以将值映射为字符串和类值。
感谢您提供的任何帮助。
答案 0 :(得分:2)
你可以简单地使用dynamic
,即
public dynamic value { get; set; }
如果它看起来像一个对象,它将被实现为JObject
,可以通过dynamic
API使用,因此.value.country
将起作用,等等。如果它看起来像整数,bool或字符串:它将如此具体化。阵列也将适当处理。所以:你可以检查是否.value is string
等。请注意,这不会使用你的Value
类型,这样做会更复杂,但是:meh;你得到了数据。您可以随时手动将其切换出来。
如果您使用object
而不是dynamic
,它的行为也会如此,但是访问内部属性会更难。
答案 1 :(得分:0)
尝试
Contact contact = JsonConvert.DeserializeObject<Contact>(result[0]);
正如您在JSON中看到的,它是
"contact": [
表示一个数组,目前你只是传递整个数组
答案 2 :(得分:0)
除非您确定JSON始终具有相同的结构,否则最好使用dynamic
变量而不是deserialize
将其添加到类中。
如果您希望使用课程,则可以使用runtime
在reflection
上自行构建自己的课程。但这就像用大炮杀死苍蝇并且你可能不会需要它,所以只需使用dynamic
变量,它就是&#39 ;最好使用JSON字符串。