在j#中将json反序列化为匿名对象

时间:2011-07-12 22:27:42

标签: .net json

如何将一串json格式的数据转换为匿名对象

6 个答案:

答案 0 :(得分:11)

C#4.0添加了可以使用的动态对象。看看this

答案 1 :(得分:8)

使用动力学是这样的:

string jsonString = "{\"dateStamp\":\"2010/01/01\", \"Message\": \"hello\" }";
dynamic myObject = JsonConvert.DeserializeObject<dynamic>(jsonString);

DateTime dateStamp = Convert.ToDateTime(myObject.dateStamp);
string Message = myObject.Message;

答案 2 :(得分:1)

vb.net使用Newtonsoft.Json:

dim jsonstring = "..."
dim foo As JObject = JObject.Parse(jsonstring)
dim value1 As JToken = foo("key")


e.g.:
dim jsonstring = "{"MESSAGE":{"SIZE":"123","TYP":"Text"}}"
dim foo = JObject.Parse(jsonstring)
dim messagesize As String = foo("MESSAGE")("SIZE").ToString()
'now in messagesize is stored 123 as String

所以你不需要一个固定的结构,但你需要知道你能在那里找到什么。

但如果你甚至不知道里面是什么,那么你可以通过导航成员枚举那个JObject,例如.first(),. next() 例如:所以你可以实现经典的深度优先搜索和筛选JObject

(用于将vb.net转换为c#:http://converter.telerik.com/

答案 3 :(得分:0)

我认为最接近的是.NET 4.0中的dynamic

匿名对象不起作用的原因是因为它们仍然是静态类型的,并且编译器无法为仅作为字符串存在的类提供intellisense。

答案 4 :(得分:0)

使用Newtonsoft.Json,使用DeserializeAnonymousType:

string json = GetJsonString();
var anonType = new { Order = new Order(), Account = new Account() };
var anonTypeList = new []{ anonType }.ToList(); //Trick if you have a list of anonType
var jsonResponse = JsonConvert.DeserializeAnonymousType(json, anonTypeList);

我的答案基于以下答案:https://stackoverflow.com/a/4980689/1440321

答案 5 :(得分:0)

由于没有人提到 SimpleJSON,所以我将其添加到此处。这是一个小类(低于 50k),您只需要使用其中一个文件(Unity、.NET 或 Binary),与 NewtonSoft 库(当前为 JSON.NET)相比,这令人印象深刻。它不需要您在程序中包含整个 C# 编译器,而且速度相对较快(需要进行一些调整以使其更快)。它也有延迟加载,当你只需要读取它的一部分时,它不会解析整个 JSON。

解析是这样完成的

JSONNode node = JSON.Parse(str)

访问内容就是这样

node["key"].AsString
node["key"].AsInt
node["key"].AsArray   // To access JSON Array
node["key"].AsObject  // To access JSON in key as object
...

或者你可以像这样继续使用括号

node["key1"]["key2"]["key3"].AsString

要创建 JSON 字符串,我将使用 StringBuilder 并手动生成 json 字符串,这是有史以来最快的方法。但是如果你愿意,你可以像这样使用 SimpleJson

JSONNode node = new JSONObject();
node["key"]= "some data";
node["key1"] = new JSONObject();
node["key1"]["key2"] = "another data";
String s = node.ToString();

会生成如下的json字符串

{
    "key":"somedata",
    "key1": {
        "key2":"another data"
    }
}

如果key不存在,以前的版本不会抛出异常并返回默认值(在C#标准中定义,但当前版本会抛出异常。