我的目标是能够接受任何输入并使用它将数据添加到现有数据库中。我如何访问'name'&'usernum属性,而不专门声明反序列化程序(因为类将根据查询而更改(?
{
"MessageType":"Sql",
"SqlCommandString":"select [name],[usernum] from x.dbo.y",
"DbReply":[
{
"name":"xx",
"usernum":22
},
{
"name":"yy",
"usernum":23
}
]
}
C#反序列化JSON:
public class SqlReply
{
public string MessageType { get; set; }
public string SqlCommandString { get; set; }
public List<object> DbReply { get; set; }
}
您可以使用Json.Linq
:
var json = @"{
""MessageType"":""Sql"",
""SqlCommandString"":""select [name],[usernum] from x.dbo.y"",
""DbReply"":[
{
""name"":""xx"",
""usernum"":22
},
{
""name"":""yy"",
""usernum"":23
}
]
}";
var sql = JToken.Parse(json);
var replies = sql["DbReply"]
.Select(x => new
{
Name = (string)x["name"],
UserNum = (int)x["usernum"],
});
以下是如何使用System.Web.Extensions.dll
中定义的JavaScriptSerializer
类来实现这一点。您可以将JSON数据反序列化为dynamic
对象:
var serializer = new JavaScriptSerializer();
dynamic obj = serializer.Deserialize(json, typeof(object));
foreach (var reply in obj["DbReply"])
{
string name = reply["name"];
int usernum = reply["usernum"];
}
或进入DbReply
:
var serializer = new JavaScriptSerializer();
SqlReply obj = serializer.Deserialize(json, typeof(SqlReply)) as SqlReply;
foreach (dynamic reply in obj.DbReply)
{
string name = reply["name"];
int usernum = reply["usernum"];
}
感谢@stuartd在评论中的建议,我将使用解析然后手动解析字符串