在C#中从字符串创建JSON对象

3

我正在尝试创建一个包含一个容器和一个数组的JSON字符串。 我可以使用stringbuilder来完成这个任务,但我正在寻找更好的方法来获取JSON字符串;我想要:

{ "message":{ "text":"test sms"},"endpoints":["+9101234"]} 

我尝试了这个:

我试过这个:

string json = new JavaScriptSerializer().Serialize(new
              {
                  text = "test sms",
                  endpoints = "[dsdsd]"
              });

输出结果如下:

{"text":"test sms","endpoints":"[dsdsd]"}

请问如何获得所需格式?

1个回答

15

在最新版本的.NET中,我们有System.Text.Json命名空间,不再需要第三方库来处理json。

using System.Text.Json;

使用JsonSerializer类进行序列化:

var data = GetData();
var json = JsonSerializer.Serialize(data);

并反序列化:

public class Person
{
   public string Name { get; set; }
}

...
var person = JsonSerializer.Deserialize<Person>("{\"Name\": \"John\"}");

在其他版本的.NET平台中,有不同的方法,比如使用JavaScriptSerializer,其中最简单的方法是使用匿名类型,例如:

string json = new JavaScriptSerializer().Serialize(new
                {
                    message = new { text = "test sms" },
                    endpoints = new [] {"dsdsd", "abc", "123"}
                });

另外一种方法是定义一个类来保存这些值,并将该类的实例序列化成JSON字符串。例如,定义这些类:

public class SmsDto
{
   public MessageDto message { get; set; }

   public List<string> endpoints { get; set; }
}

public class MessageDto
{
   public string text { get; set; }
}

并使用它:

var sms = new SmsDto()
{
   message = new MessageDto() { text = "test sms" } ,
   endpoints = new List<string>() { "dsdsd", "abc", "123" }
}

string json = new JavaScriptSerializer().Serialize(sms);

3
“message” 后面应该跟着“=”,而不是“:”吗? - Markiian Benovskyi
是的,你说得对@MarkBenovsky,谢谢。(JavaScript 真令人困惑)哈哈。 - Felipe Oriani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接