use*_*839 1 c# system.text.json
所有,当执行以下代码时,我们遇到以下异常(以粗体显示),我们试图将根节点“test”添加到最终的 json 结果中。我们希望在没有匿名对象或包装类的情况下实现这一点。
“无法在数组中写入 JSON 属性或将其作为第一个 JSON 令牌。当前令牌类型为“无”。
internal static class Program
{
public static void Main(string[] args)
{
customer cust = new customer();
cust.firstname = "first";
cust.lastname = "last";
Console.WriteLine(AddRootToJson("test", cust));
}
public static string AddRootToJson(string root, object obj)
{
var msSt = new MemoryStream {Position = 0};
using var utf8JsonWriter = new Utf8JsonWriter(msSt);
utf8JsonWriter.WriteStartObject(root);
JsonSerializer.Serialize(utf8JsonWriter, obj);
utf8JsonWriter.WriteEndObject();
utf8JsonWriter.Flush();
using var reader = new StreamReader(msSt);
return reader.ReadToEnd();
}
}
public class customer
{
public string firstname;
public string lastname;
}
Run Code Online (Sandbox Code Playgroud)
首先,目前System.Text.Json不支持序列化字段,因此您需要更改您的类(请参阅文档中对公共和非公共字段的支持):
public class customer
{
public string firstname {get;set;}
public string lastname {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
之后您可以尝试下一步:
public static string AddRootToJson(string root, object obj)
{
using var msSt = new MemoryStream();
using var utf8JsonWriter = new Utf8JsonWriter(msSt);
utf8JsonWriter.WriteStartObject();
utf8JsonWriter.WritePropertyName(root);
JsonSerializer.Serialize(utf8JsonWriter, obj);
utf8JsonWriter.WriteEndObject();
utf8JsonWriter.Flush();
return Encoding.UTF8.GetString(msSt.ToArray());
}
Console.WriteLine(AddRootToJson("test", new customer {firstname = "first", lastname = "last"})); // prints {"test":{"firstname":"first","lastname":"last"}}
Run Code Online (Sandbox Code Playgroud)