我有一个json如下:
"[{"a":"b","c":"d"},{"a":"e","c":"f"},{"a":"g","c":"h"}]"
现在我想把它变成匿名类型“foo”
的对象列表 var foo=new { a=string.empty , c=string.empty };
代码是:
ServiceStackJsonSerializer Jserializer = new ServiceStackJsonSerializer();
dynamic foos = Jserializer.Deserialize<List<foo.GetType()>>(jsonString);
但没有工作。
更新:
将ServiceStack
替换为JavascriptSerializer
并传递dictionary[]
解决了问题,而无需anonymous
输入
JavaScriptSerializer jSerializer = new JavaScriptSerializer();
var Foos = jSerializer.Deserialize<Dictionary<string, object>[]>(jsonString);
答案 0 :(得分:2)
我不知道Jserializer
类是什么,但我知道JavaScriptSerializer
类。不幸的是,它不支持反序列化为匿名类型。你必须创建一个这样的具体类型:
class Foo
{
public string a { get; set; }
public string c { get; set; }
}
使用以下代码为我工作:
const string json =
@"[{""a"":""b"",""c"":""d""},{""a"":""e"",""c"":""f""},{""a"":""g"",""c"":""h""}]";
var foos = new JavaScriptSerializer().Deserialize<Foo[]>(json);
变量foos
将包含Foo
个实例的数组。
答案 1 :(得分:2)
您可以通过多种方式dynamically parse JSON with ServiceStack's JsonSerializer例如:
var json = "[{\"a\":\"b\",\"c\":\"d\"},{\"a\":\"e\",\"c\":\"f\"},{\"a\":\"g\",\"c\":\"h\"}]";
var dictionary = json.FromJson<List<Dictionary<string, string>>>();
".NET Collections:".Print();
dictionary.PrintDump();
List<JsonObject> map = JsonArrayObjects.Parse(json);
"Dynamically with JsonObject:".Print();
map.PrintDump();
使用ServiceStack's T.Dump() extension method打印出来:
.NET Collections:
[
{
a: b,
c: d
},
{
a: e,
c: f
},
{
a: g,
c: h
}
]
Dynamically with JsonObject:
[
{
a: b,
c: d
},
{
a: e,
c: f
},
{
a: g,
c: h
}
]
答案 2 :(得分:1)
对于你想要做的事情,听起来像json.net会更合适。看到这个问题 Deserialize json object into dynamic object using Json.net