在C#中将字符串转换为JSON数组

3
我是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/

将字符串转换为Json数组

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

将字符串转换为Json

为了学习如何将我的字符串转换为Json数组,我浏览了上面的链接。这些链接解释得非常好,但是对于我的情况,我不知道如何将这两个字符串转换为单一的Json数组。

我希望输出的格式像这样:

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

请帮助我完成这个任务。


如果你使用C#进行编程,显然需要遵守C#的语法...首先,尝试简单的字符串拼接,例如var json_data = "result\":[{\"username\":" + username + ",\"password\":" + ...。如果你对此有感觉,那么可以看一下string.Format(),它会让你的生活更轻松。 - user2819245
正如elgonzo所说,但从你的例子看,你似乎需要特别关注如何将双引号字符放入字符串中,所以要特别注意var withBackslashes = " \" ";var verbatim = @" "" ";这两个部分。 - undefined
5个回答

7
你可以使用JSON序列化API。常用的是Newtonsoft提供的一个叫Json.NET的API。
这种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可以在离线模式下工作吗?如果不能,如何处理?请告诉我。 - undefined
1
你需要在项目中引用API。一旦完成这一步骤,执行时就不需要互联网连接。 - undefined
你可能需要在Visual Studio 2010中添加Json.NET(或任何NuGet API)的参考。但这只需要一次工作,将会在你进行C#开发的整个过程中帮助你。 - undefined
这段代码无法编译,因为UserData的字段是私有的。你可以简单地将它们改为公开的,但我认为更好的选择是使用匿名对象:var userData = new { username = "Tom", password = "XXXXXXXX" }; - undefined
@svick 谢谢,我把它们设为公开的了。起初我考虑过使用匿名对象,但是楼主想要一个数组,并且将匿名对象放入数组可能会让C#初学者难以理解示例代码。 - undefined
var arr = new[] { userData };这个语句有什么难的吗? - undefined

1
为了补充bytefire的回答,有几种方法可以实现这一点:
  1. 创建一个类,具有所需的属性,例如usernamepassword。我将使用Json.NET中的JsonProperty注释属性,以便序列化程序可以匹配它们,而不考虑大小写:

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

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

var user = new User { Username = "user", Password = "pass" };
var jsonUser = JsonConvert.SerializeObject(user);

使用 JsonTextWriter 来构建 json,而无需创建对象,可以使用 Json.NET
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();
}

0

我遇到的最简单的方法。当我想要解析从YelpAPI获取的JSON时,它对我起作用。

  1. 将JSON粘贴为类在你的Visual Studio或另一个IDE中
  2. 请求API并将JSON内容存储在变量contentJSON中
  3. T是其中一个类,你想要创建其列表的类,而value1是JSON文件中使用的确切字符串。

    var contentJson = await SendRequest(request);

    dynamic response = JsonConvert.DeserializeObject(contentJson);

    List<T> abc = response.value1.ToObject<List<T>>();

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


将JSON粘贴为类到您的Visual Studio或其他IDE中 - 如何操作? 我需要询问这个问题,这意味着它并不简单。 - undefined

0
或者选择其他的方案之一:简单的Json,如果你觉得JSON.net太庞大了。

0
JavaScript对象表示法中,顶层始终是一个对象。
在JSON中,数组不是一个对象,但它可以是一个值。
您可以将语法展开为这样:
{ string : [ { string : string , string : string },{ string : string , string : string } ] }

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

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

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