spo*_*rts 2 c# json json.net org.json
我正在寻找一个C#(.NET)库,它将字符串化的JSON解析为Object.
这个问题Newtonsoft.Json.JsonConvert对我来说,就是你总是需要反序列化的具体类型:
SomePredefinedType bla = JsonConvert.DeserializeObject<SomePredefinedType>(stringifiedJson);
Run Code Online (Sandbox Code Playgroud)
所以我结束了许多我不再使用的课程.
somePredefinedType类在该行中使用一次,而且永远不会更多.
当然导航更好,你可以调用属性,如:
string name = bla.Name;
string age = bla.Age;
Run Code Online (Sandbox Code Playgroud)
在Java中,我使用了org.json,其中反序列化就像这样:
JSONObject jsonObject = new JSONObject(stringifiedJson)
Run Code Online (Sandbox Code Playgroud)
导航要求您知道JSON结构是什么.但这总是事实(否则我怎么能创建这个SomePredefinedType类?)
jsonObject.getString("Name");
jsonObject.getString("Age");
Run Code Online (Sandbox Code Playgroud)
问题是:
C#是否有org.json?我不喜欢Newtonsoft.Json.
我喜欢这种匿名解析方式.
编辑: 好的,我倾向于在我的帖子中使用简化的例子,因为当人们发布一堆代码时我不喜欢.我喜欢在此基础上进行讨论,这就是我发布简单代码的原因.
这是我无法以简单的方式实现的,就像org.json一样,我会:
// Here not using any object, just as answers below stated I could:
dynamic jsonProviders = JsonConvert.DeserializeObject(stringifiedJson);
foreach (dynamic jsonProvider in jsonProviders)
{
// Fetch provider
SMSProvider provider = db.SMSProviders.SingleOrDefault(p => p.SMSProviderId == jsonProvider.SMSProviderId); // What the hell do I use here? thats an error
CheckIfExists(provider);
provider.Order = jsonProvider.Order;
}
Run Code Online (Sandbox Code Playgroud)
对我来说,Newtonsoft.Json.JsonConvert的问题是你总是需要一个具体的反序列化类型:
不必要:
dynamic result = JsonConvert.DeserializeObject("{\"Name\":\"John\",\"Age\":12}");
string name = result.Name;
int age = result.Age;
Run Code Online (Sandbox Code Playgroud)
或者:
var result = JObject.Parse("{\"Name\":\"John\",\"Age\":12}");
string name = result["Name"].Value<string>();
int age = result["Age"].Value<int>();
Run Code Online (Sandbox Code Playgroud)
如果您不想使用第三方库,则可以使用内置的.NET JavaScriptSerializer类获得类似的结果:
var serializer = new JavaScriptSerializer();
var result = (IDictionary<string, object>)serializer.DeserializeObject("{\"Name\":\"John\", \"Age\":12}");
string name = (string)result["Name"];
int age = (int)result["Age"];
Run Code Online (Sandbox Code Playgroud)