如何使用Newtonsoft提供自定义JSON格式



我使用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"
    }
]

相关内容

  • 没有找到相关文章

最新更新