我使用Newtonsoft库将LINQ结果转换为JSON格式。
生成的JSON如下所示:
[{"title":"Some title", "Score":1000}, {"title":"Some title", "Score":2000}]
如何将结果更改为:
[["Some title", 1000], ["Some title", 2000]]
谢谢!
答案 0 :(得分:3)
您只需从linq表达式中返回相应的对象类型。
在您的LINQ查询中,添加此转换:
var myNewQuery = myQuery.Select( x => new ArrayList{ x.title, x.Score } );
然后将其序列化。
一点点解释:你想要的输出是一个数组数组,每个内部数组都有两个元素,但类型不同。 C#通用列表不允许这样做,但您可以始终使用List<object>
或仅使用无类型ArrayList
作为内部数组。然后让Json.NET做它的事情并将所有集合(打字或无类型)序列化为[...]。
值得注意的是,自定义JsonConverter
的答案可能具有更好的性能,如果您有极高的吞吐量,我建议您这样做。
答案 1 :(得分:1)
您必须创建自己的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"
}
]