我使用Newtonsoft库将LINQ结果转换为JSON格式。
生成的JSON如下所示:
[{"title":"Some title", "Score":1000}, {"title":"Some title", "Score":2000}]
如何将结果更改为:
[["Some title", 1000], ["Some title", 2000]]
谢谢!
您可以简单地从linq表达式中返回相应的对象类型。
在LINQ查询中,添加以下转换:
var myNewQuery = myQuery.Select( x => new ArrayList{ x.title, x.Score } );
然后将其序列化。
Fiddle
一点解释:您想要的输出是一个数组数组,每个内部数组正好有两个元素,但类型不同。C#泛型列表不允许这样做,但您可以始终对内部数组使用List<object>
或简单地使用非类型化的ArrayList
。然后让Json.NET做它的事情,并将所有集合(类型化或非类型化)序列化到[…]。
同样值得注意的是,使用自定义JsonConverter
的答案可能具有更好的性能,以防您有极高的吞吐量,我建议您这样做。
您必须创建自己的JsonConverter,并使用一些有效的json逻辑覆盖WriteJson方法。
public class SomeJsonConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
JObject result = new JObject();
SomeModel model = (SomeModel)value;
//create result as you want
//get JToken.FromObject(model.property) - if you want to get some property from model
result.WriteTo(writer);
}
}
你会这样使用:
JsonConvert.SerializeObject(serializableModel, Formatting.None, new SomeJsonConverter()));
//serializableModel has SomeModel type
您可以在此处检查json的有效性:http://jsonlint.com/
您必须存储以下内容:
[
{
"Some title": "1000"
},
{
"Some title": "2000"
}
]
如果将{}更改为[]意味着创建另一种对象,则必须看到:
json对象如下所示:
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
这里有一个对象数组:
[
{
"item": "Xylophone"
},
{
"item": "Carrot"
},
{
"item": "Apple"
}
]