C# 不使用反序列化程序解析JSON列表
我的目标是能够接受任何输入并使用它向现有数据库添加数据。如何访问“name”和“usernum”属性而不特别声明反序列化器(因为类将根据查询而更改) C#要反序列化JSON:C# 不使用反序列化程序解析JSON列表,c#,json,deserialization,json-deserialization,C#,Json,Deserialization,Json Deserialization,我的目标是能够接受任何输入并使用它向现有数据库添加数据。如何访问“name”和“usernum”属性而不特别声明反序列化器(因为类将根据查询而更改) C#要反序列化JSON: public class SqlReply { public string MessageType { get; set; } public string SqlCommandString { get; set; } public List<object> DbReply { get;
public class SqlReply
{
public string MessageType { get; set; }
public string SqlCommandString { get; set; }
public List<object> DbReply { get; set; }
}
公共类SqlReply
{
公共字符串MessageType{get;set;}
公共字符串SqlCommandString{get;set;}
公共列表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数据反序列化为动态
对象:
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建议,我将使用手动解析字符串听起来像是而不是反序列化它,你想手动解析它并访问属性吗?像这样?使
DbReply
成为列表
。在没有明确声明“反序列化器”的情况下,您是指SqlReply
类吗?您可以反序列化为动态
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"];
}