我刚刚使用XmlWriter创建了一些XML,以便在HTTP响应中发回.你将如何创建一个JSON字符串.我假设您只是使用stringbuilder来构建JSON字符串,并将它们的响应格式化为JSON?
Orr*_*Orr 348
使用 Newtonsoft.Json让它变得非常简单:
Product product = new Product();
product.Name = "Apple";
product.Expiry = new DateTime(2008, 12, 28);
product.Price = 3.99M;
product.Sizes = new string[] { "Small", "Medium", "Large" };
string json = JsonConvert.SerializeObject(product);
Run Code Online (Sandbox Code Playgroud)
文档:序列化和反序列化JSON
CMS*_*CMS 243
您可以使用JavaScriptSerializer类,查看本文以构建有用的扩展方法.
文章代码:
namespace ExtensionMethods
{
public static class JSONHelper
{
public static string ToJSON(this object obj)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Serialize(obj);
}
public static string ToJSON(this object obj, int recursionDepth)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
serializer.RecursionLimit = recursionDepth;
return serializer.Serialize(obj);
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
using ExtensionMethods;
...
List<Person> people = new List<Person>{
new Person{ID = 1, FirstName = "Scott", LastName = "Gurthie"},
new Person{ID = 2, FirstName = "Bill", LastName = "Gates"}
};
string jsonString = people.ToJSON();
Run Code Online (Sandbox Code Playgroud)
Joe*_*ung 13
此代码段使用.NET 3.5中System.Runtime.Serialization.Json的DataContractJsonSerializer.
public static string ToJson<T>(/* this */ T value, Encoding encoding)
{
var serializer = new DataContractJsonSerializer(typeof(T));
using (var stream = new MemoryStream())
{
using (var writer = JsonReaderWriterFactory.CreateJsonWriter(stream, encoding))
{
serializer.WriteObject(writer, value);
}
return encoding.GetString(stream.ToArray());
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
请访问http://www.codeplex.com/json/查看json-net.aspx项目.为什么重新发明轮子?
You can also try my ServiceStack JsonSerializer it's the fastest .NET JSON serializer at the moment. It supports serializing DataContracts, any POCO Type, Interfaces, Late-bound objects including anonymous types, etc.
Basic Example
var customer = new Customer { Name="Joe Bloggs", Age=31 };
var json = JsonSerializer.SerializeToString(customer);
var fromJson = JsonSerializer.DeserializeFromString<Customer>(json);
Run Code Online (Sandbox Code Playgroud)
Note: Only use Microsofts JavaScriptSerializer if performance is not important to you as I've had to leave it out of my benchmarks since its up to 40x-100x slower than the other JSON serializers.
小智 7
Simlpe使用Newtonsoft.Json和Newtonsoft.Json.Linq库。
//Create my object
var my_jsondata = new
{
Host = @"sftp.myhost.gr",
UserName = "my_username",
Password = "my_password",
SourceDir = "/export/zip/mypath/",
FileName = "my_file.zip"
};
//Tranform it to Json object
string json_data = JsonConvert.SerializeObject(my_jsondata);
//Print the Json object
Console.WriteLine(json_data);
//Parse the json object
JObject json_object = JObject.Parse(json_data);
//Print the parsed Json object
Console.WriteLine((string)json_object["Host"]);
Console.WriteLine((string)json_object["UserName"]);
Console.WriteLine((string)json_object["Password"]);
Console.WriteLine((string)json_object["SourceDir"]);
Console.WriteLine((string)json_object["FileName"]);
Run Code Online (Sandbox Code Playgroud)
如果您想避免创建类并创建 JSON,则创建动态对象并序列化对象。
dynamic data = new ExpandoObject();
data.name = "kushal";
data.isActive = true;
// convert to JSON
string json = Newtonsoft.Json.JsonConvert.SerializeObject(data);
Run Code Online (Sandbox Code Playgroud)
读取 JSON 并反序列化,如下所示:
// convert back to Object
dynamic output = Newtonsoft.Json.JsonConvert.DeserializeObject(json);
// read a particular value:
output.name.Value
Run Code Online (Sandbox Code Playgroud)
ExpandoObject
来自System.Dynamic
命名空间。
如果您需要复杂的结果(嵌入式),请创建自己的结构:
class templateRequest
{
public String[] registration_ids;
public Data data;
public class Data
{
public String message;
public String tickerText;
public String contentTitle;
public Data(String message, String tickerText, string contentTitle)
{
this.message = message;
this.tickerText = tickerText;
this.contentTitle = contentTitle;
}
};
}
Run Code Online (Sandbox Code Playgroud)
然后你可以通过调用获得JSON字符串
List<String> ids = new List<string>() { "id1", "id2" };
templateRequest request = new templeteRequest();
request.registration_ids = ids.ToArray();
request.data = new templateRequest.Data("Your message", "Your ticker", "Your content");
string json = new JavaScriptSerializer().Serialize(request);
Run Code Online (Sandbox Code Playgroud)
结果将是这样的:
json = "{\"registration_ids\":[\"id1\",\"id2\"],\"data\":{\"message\":\"Your message\",\"tickerText\":\"Your ticket\",\"contentTitle\":\"Your content\"}}"
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你!
如果你不能或不想使用两个内置JSON序列化(JavaScriptSerializer和DataContractJsonSerializer),你可以尝试JsonExSerializer库-我使用它的一些项目和工作得很好.
归档时间: |
|
查看次数: |
580479 次 |
最近记录: |