开发者时间最便宜的方法是使用 C# dynamic
using Newtonsoft.Json;
Int32 GetId()
{
String jsonStr = "{ \"count\":...";
dynamic jsonBlob = JObject.Parse( jsonStr );
return jsonBlob.value[0].id;
}
注意我个人反对使用dynamic,因为你失去了编译时类型安全,而dynamic对于一次性操作来说有点昂贵——所以你可能想使用Json.NET自己的令牌来处理它对象:
JObject root = JObject.Parse( jsonStr );
JToken idToken = root.Properties["value"].GetChildren().First().Properties["id"];
return idToken.ToObject<Int32>();
最后,您始终可以定义自己的类并以这种方式反序列化:
class Foo {
public Int32 Count { get; set; }
public FooValue[] Value { get; set; }
}
class FooValue {
public Int32 Id { get; set; }
public Guid ProjectId { get; set; }
public String Name { get; set; }
}
Foo foo = JsonConvert.Deserialize<Foo>( jsonStr );
return foo.Value[0].Id;
如果 JSON 格式始终保持一致并且您不会处理任何其他 JSON,那么您可以通过使用正则表达式甚至是简单的字符串处理来避免对 Newtonsoft.Json (Json.NET) 的依赖:
Int32 idIdx = jsonStr.IndexOf("\"id\":");
if( idIdx == -1 ) return null;
Int32 commaIdx = jsonStr.IndexOf(",", idIdx);
if( commaIdx == -1 ) return null;
return jsonStr.Substring( idIdx, commaIdx - idIdx );