如何在不使用JSON.Net库创建自定义类的情况下从字符串创建JSON

RBT*_*RBT 3 .net c# json json.net

我有这个非常简单的方法如下:

//my current file
using Newtonsoft.Json;
string key1 = "FirstKey";
string key2 = "SecondKey";
string key3 = "ThirdKey";
private string CreateJson(string val1,  string val2, string val3,string val4,  string val5, string val6)
{
    //process the six arguments and three key-related member variables to create a JSON array
    //don't want to use JsonConvert.SerializeObject the way I'm doing below as it requires creating a class

    var configs = new List<CustomClass>
                         { new CustomClass{ FirstKey = val1,SecondKey= val2,ThirdKey= val3}
                            , new CustomClass{ FirstKey= val4,SecondKey= val5,ThirdKey = val6}
                        };
    var jsonData = JsonConvert.SerializeObject(configs);
   return jsonData;
}

//A class in another file
public class CustomClass
{
    public string FirstKey { get; set; }
    public string SecondKey{ get; set; }
    public string ThirdKey{ get; set; }

}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用JSON.Net创建JSON数组.预期产量如下:

[{"FirstKey":val1,"SecondKey":val2,"ThirdKey":val3}
, {"FirstKey":val4,"SecondKey":val5,"ThirdKey":val6}]
Run Code Online (Sandbox Code Playgroud)

这里val1val6值应该在运行时被参数值替换.

最初,由于只有三种类型的字符串键值对,所以我认为只需使用字符串文字并以JSON格式依次追加即可创建JSON字符串非常简单.但很快我偶然发现了可以使JSON字符串变形的转义字符世界,例如\r.

我过去一直在使用JSON.Net库来简单地使用JSONConvert类来序列化和反序列化对象,我从不关心并且完全没有意识到JSON.Net库对转义符号的这种处理在幕后为我们保持JSON字符串有效.

无论如何,回到我的问题.我能够通过创建具有三个属性的自定义类来解决我的问题FirstKey,SecondKeyThirdKey.然后,创建的类的一个对象,然后在参数分配值val1val2对然后,然后使用JsonConvert.SerializeObjectAPI.

我想要一种使用JSON.Net NuGet包创建JSON字符串的简单方法,而不涉及自定义类.CustomClass完全创建一个类似乎是一个开销.StringBuilder.Append如果它在我正在使用的JSON库中可用,我正在寻找类似API的东西.我不确定我是否缺少JSON.Net中的任何API.

Nko*_*osi 8

正如评论中所提到的,您可以使用匿名对象轻松创建它.

private string CreateJson(string val1, string val2, string val3, string val4, string val5, string val6) {

    var configs = new[]
    { 
        new { FirstKey = val1, SecondKey = val2, ThirdKey = val3}, 
        new { FirstKey = val4, SecondKey = val5, ThirdKey = val6}
    };

    var jsonData = JsonConvert.SerializeObject(configs);

    return jsonData;
}
Run Code Online (Sandbox Code Playgroud)

  • 你甚至可以使用`JObject.FromObject`! (3认同)