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;

我的目标是能够接受任何输入并使用它向现有数据库添加数据。如何访问“name”和“usernum”属性而不特别声明反序列化器(因为类将根据查询而更改)

C#要反序列化JSON:

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"];
}