【问题标题】:Convert string to json array in C#在 C# 中将字符串转换为 json 数组
【发布时间】:2014-06-07 10:53:21
【问题描述】:

我是 C# 新手。我想将这两个字符串转换为单个 JSON 数组。
我尝试了以下方法:

var username = "username";
var password = "XXXXXXXX";
var json_data = "result":[{"username":username,"password":password}]'; //To convert the string to Json array i tried like this
MessageBox.Show(json_data);

它不起作用,我收到很多错误。

我浏览了以下链接:

http://json.codeplex.com/

Convert string to Json Array

http://www.codeproject.com/Articles/272335/JSON-Serialization-and-Deserialization-in-ASP-NET

convert string to json

学习如何将我的字符串转换为 Json 数组。上面的 url 中解释得很好,但就我而言,我不知道如何将这两个字符串转换为单个 Json 数组。

我希望输出是这样的格式,

[{"result":{"username":"Tom","password":"XXXXXXX"}}]

请帮我做这件事。

【问题讨论】:

  • 如果你用 C# 编程,显然你需要遵守 C# 语法……首先,尝试简单的字符串连接,比如var json_data = "result\":[{\"username\":" + username + ",\"password\":" + ...。如果你对它有感觉,那就看看string.Format(),它会让你的生活更轻松。
  • 正如 elgonzo 所说,但从您的示例看来,您需要特别注意如何将双引号字符放入字符串中,因此请特别注意 var withBackslahes = " \" ";var verbatim = @" "" ";

标签: c# .net json visual-studio-2010


【解决方案1】:

您可以使用 JSON 序列化程序 API。一个常用的是 Newtonsoft 的,叫做Json.NET

此类 API 的工作是将 C# 对象转换为 JSON(也称为序列化)并将 JSON 数据转换为 C# 对象(反序列化)。

在您的示例中,可以按如下方式使用 Newtonsoft JSON API。

public class UserData { public string username; public string password; }

var userData = new UserData() { username = "Tom", password = "XXXXXXXX" };

UserData[] arr = new UserData[] { userData };

string json_data = JsonConvert.SerializeObject(arr); // this is the Newtonsoft API method

// json_data will contain properly formatted Json. Something like [{"result":{"username":"Tom","password":"XXXXXXX"}}] 

MessageBox.Show(json_data); 

请原谅我正在通过电话打字。

【讨论】:

  • 我是否需要导入任何类才能使用此 API。我的应用程序可能也必须在离线模式下工作,所以如果不如何处理,此 API 是否可以离线工作。请告诉我。
  • 您需要将 API 引用到您的项目中。一旦完成,您就不需要互联网来执行它。
  • 您可能需要在 Google 上搜索如何在 Visual Studio 2010 中添加对 Json.NET(或任何 NuGet API)的引用。但这是一次性的工作,将在整个 C# 开发过程中为您提供帮助。跨度>
  • 这段代码不会编译,因为UserData 的字段是私有的。您可以简单地将它们公开,但我认为更好的选择是使用匿名对象:var userData = new { username = "Tom", password = "XXXXXXXX" };
  • @svick 谢谢,让他们公开。起初我想到了匿名,但 OP 想要一个数组,并且制作一个匿名对象数组可能会使 C# 初学者的示例有点难以理解。
【解决方案2】:

为了扩展 bytefire 的答案,有几种方法可以实现:

  1. 创建一个具有所需属性的类,在您的情况下为 usernamepassword。我将使用来自 Json.NET 的 JsonProperty 注释属性,以便序列化程序可以匹配它们而不管小写/大写:

    public class User
    {
       [JsonProperty(PropertName = username)]
       public string Username { get; set; }
    
       [JsonProperty(PropertName = password)]
       public string Password { get; set; }
    }
    

然后,使用 JsonConvert.SerializeObject 序列化您的对象:

var user = new User { Username = "user", Password = "pass" };
var jsonUser = JsonConvert.SerializeObject(user);
  1. 使用Json.NET中的JsonTextWriter,可以在不创建对象的情况下构造json:

    var stringBuilder = new StringBuilder();
    var stringWriter = new StringWriter(stringBuilder);
    string jsonString = null;
    
    using (var jsonWriter = new JsonTextWriter(stringWriter))
    {
       writer.Formatting = Formatting.Indented;
       writer.WriteStartObject();
       writer.WriterPropertyName("username");
       writer.WritePropertyValue("user");
       writer.WriterPropertyName("password");
       writer.WritePropertyValue("pass");
       writer.WriteEnd();
       writer.WriteEndObject();
       jsonString = writer.ToString();
    }
    

【讨论】:

    【解决方案3】:

    如果您认为 JSON.net 太大,请选择众多替代方案之一:simple Json

    【讨论】:

      【解决方案4】:

      Javascript Object Notation 中,顶层始终是一个对象。

      在 JSON 中,数组不是对象,但可以是值。

      你可以把语法展开成这样:

      { string : [ { string : string , string : string },{ string : string , string : string } ] }
      

      在你的情况下,这可能是:

      { "allUsers": [ { "name": "Luis" , "password": "R0Cke+" }, { "name": "Janette" , "password": "BookTour2011" } ] }
      

      【讨论】:

        【解决方案5】:

        我遇到的最简单的方法。当我想解析从 YelpAPI 获得的 JSON 时,它对我有用。

        1. 将 JSON 作为类粘贴到您的 Visual Studio 或其他 IDE 中
        2. 请求 API 并获取 var contentJSON 中的 JSON 内容。
        3. T here from 是您想要列出的类之一,而值 1 是 JSON 文件中使用的精确字符串。

          var contentJson = await SendRequest(request);

          动态响应 = JsonConvert.DeserializeObject(contentJson);

          列表 abc = response.value1.ToObject>();

        注意:T 和 value1 在 JSON 中是相同的,但是当我们将 JSON 作为类粘贴时,我们会在 JSON 树中得到 T 类和 value1 作为父值。 代码:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-05-13
          • 1970-01-01
          • 1970-01-01
          • 2016-07-13
          • 2021-05-09
          • 2011-09-11
          • 2020-04-27
          相关资源
          最近更新 更多