分析不带反序列化程序的JSON列表



我的目标是能够接受任何输入并使用它将数据添加到现有数据库中。我如何访问'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在评论中的建议,我将使用解析然后手动解析字符串

最新更新