C# 在Json.NET中指定反序列化

C# 在Json.NET中指定反序列化,c#,json,deserialization,C#,Json,Deserialization,我有一些深层的Json结构,如下面通过连线传入C#应用程序: [ { "status": "ok", "node": "vm2", "type": "message", "result": { "tx.mqid": "amq.gen-+Phq5acfC9kbs7Ch/0cUUw==", "tx.time": 1297273910, "tx.id": 28 } } ... ] 我正在进行反序列化,如下所示:

我有一些深层的Json结构,如下面通过连线传入C#应用程序:

[
{
    "status": "ok",
    "node": "vm2",
    "type": "message",
    "result": {
        "tx.mqid": "amq.gen-+Phq5acfC9kbs7Ch/0cUUw==",
        "tx.time": 1297273910,
        "tx.id": 28
    }
}
...
]
我正在进行反序列化,如下所示:

List<Hashtable> des = JsonConvert.DeserializeObject<List<Hashtable>>(objs);
JsonConvert.DeserializeObject<List<Hashtable<Hashtable>>>
JObject nodeResult = (JObject)nodeRec["result"];
Hashtable nrh = JsonConvert.DeserializeObject<Hashtable>(nodeResult.ToString());
List des=JsonConvert.DeserializeObject(objs);
现在,我需要从上面的结构中提取“result”字典

这样做的问题是它并不总是存在。它可以被其他东西代替,特别是当错误发生时。此外,结果可能会根据Json客户端调用的函数而变化。所以我不能像这样静态地指定它:

List<Hashtable> des = JsonConvert.DeserializeObject<List<Hashtable>>(objs);
JsonConvert.DeserializeObject<List<Hashtable<Hashtable>>>
JObject nodeResult = (JObject)nodeRec["result"];
Hashtable nrh = JsonConvert.DeserializeObject<Hashtable>(nodeResult.ToString());
JsonConvert.DeserializeObject
现在我正在以一种有点愚蠢的方式进行反序列化,如下所示:

List<Hashtable> des = JsonConvert.DeserializeObject<List<Hashtable>>(objs);
JsonConvert.DeserializeObject<List<Hashtable<Hashtable>>>
JObject nodeResult = (JObject)nodeRec["result"];
Hashtable nrh = JsonConvert.DeserializeObject<Hashtable>(nodeResult.ToString());
JObject nodeResult=(JObject)nodeRec[“结果”];
Hashtable nrh=JsonConvert.DeserializeObject(nodeResult.ToString());
也就是说,我将“result”反序列化为JObject,然后将其序列化为文本,然后将其反序列化为哈希表


有没有办法将JObject直接转换为哈希表,或者从“result”这样的json文本中深度嵌套的结构开始转换为哈希表?上面的方法很有效,但我讨厌它的笨重。

您要做的是反序列化到表示json的对象

[DataContract]
class JSONResponse {
    [DataMember]
    public string status {get;set;}
    [DataMember]
    public string node {get;set;}
    [DataMember]
    public string type {get;set;}
    [DataMember]
    public Hashtable<Result> result {get;set;}
}
[DataContract]
class Result {
    [DataMember]
    public string tx.mqid {get;set;}
    [DataMember]
    public string tx.time {get;set;}
    [DataMember]
    public string tx.id {get;set;}
}
[DataContract]
类JSONResponse{
[数据成员]
公共字符串状态{get;set;}
[数据成员]
公共字符串节点{get;set;}
[数据成员]
公共字符串类型{get;set;}
[数据成员]
公共哈希表结果{get;set;}
}
[数据合同]
班级成绩{
[数据成员]
公共字符串tx.mqid{get;set;}
[数据成员]
公共字符串tx.time{get;set;}
[数据成员]
公共字符串tx.id{get;set;}
}
然后将反序列化代码更新为

JSONResponse response = JsonConvert.DeserializeObject<JSONReponse>();
JSONResponse-response=JsonConvert.DeserializeObject();
事物的命名和排序/嵌套可能有点芬尼基,所以要小心