如何在C#中创建JSON字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在C#中创建JSON字符串相关的知识,希望对你有一定的参考价值。
我刚刚使用XmlWriter创建了一些XML,以便在HTTP响应中发回。你将如何创建一个JSON字符串。我假设您只是使用stringbuilder来构建JSON字符串,并将它们的响应格式化为JSON?
你可以使用JavaScriptSerializer class,检查this article来构建一个有用的扩展方法。
文章代码:
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);
用法:
using ExtensionMethods;
...
List<Person> people = new List<Person>
new PersonID = 1, FirstName = "Scott", LastName = "Gurthie",
new PersonID = 2, FirstName = "Bill", LastName = "Gates"
;
string jsonString = people.ToJSON();
简单地使用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"]);
DataContractJSONSerializer将为您完成一切,与XMLSerializer一样简单。在网络应用程序中使用它很简单。如果您使用的是WCF,则可以使用属性指定其使用。 DataContractSerializer系列也非常快。
我发现你根本不需要序列化器。如果将对象作为List返回。让我举个例子。
在我们的asmx中,我们使用传递的变量获取数据
// return data
[WebMethod(CacheDuration = 180)]
public List<latlon> GetData(int id)
var data = from p in db.property
where p.id == id
select new latlon
lat = p.lat,
lon = p.lon
;
return data.ToList();
public class latlon
public string lat get; set;
public string lon get; set;
然后使用jquery访问服务,传递该变量。
// get latlon
function getlatlon(propertyid)
var mydata;
$.ajax(
url: "getData.asmx/GetLatLon",
type: "POST",
data: "'id': '" + propertyid + "'",
async: false,
contentType: "application/json;",
dataType: "json",
success: function (data, textStatus, jqXHR) //
mydata = data;
,
error: function (xmlHttpRequest, textStatus, errorThrown)
console.log(xmlHttpRequest.responseText);
console.log(textStatus);
console.log(errorThrown);
);
return mydata;
// call the function with your data
latlondata = getlatlon(id);
我们得到了回应。
"d":["__type":"MapData+latlon","lat":"40.7031420","lon":"-80.6047970]
编码使用
JSON数组的简单对象EncodeJsObjectArray()
public class dummyObject
public string fake get; set;
public int id get; set;
public dummyObject()
fake = "dummy";
id = 5;
public override string ToString()
StringBuilder sb = new StringBuilder();
sb.Append('[');
sb.Append(id);
sb.Append(',');
sb.Append(JSONEncoders.EncodeJsString(fake));
sb.Append(']');
return sb.ToString();
dummyObject[] dummys = new dummyObject[2];
dummys[0] = new dummyObject();
dummys[1] = new dummyObject();
dummys[0].fake = "mike";
dummys[0].id = 29;
string result = JSONEncoders.EncodeJsObjectArray(dummys);
结果:[[29,“迈克”],[5,“假”]]
漂亮的用法
漂亮的打印JSON数组PrettyPrintJson()字符串扩展方法
string input = "[14,4,[14,\"data\"],[[5,\"10.186.122.15\"],[6,\"10.186.122.16\"]]]";
string result = input.PrettyPrintJson();
结果是:
[
14,
4,
[
14,
"data"
],
[
[
5,
"10.186.122.15"
],
[
6,
"10.186.122.16"
]
]
]
使用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);
文档:Serializing and Deserializing JSON
这个库非常适合来自C#的JSON
http://james.newtonking.com/pages/json-net.aspx
此代码段使用.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());
看看http://www.codeplex.com/json/的json-net.aspx项目。为什么重新发明轮子?
您也可以尝试我的ServiceStack JsonSerializer,这是fastest .NET JSON serializer。它支持序列化DataContracts,任何POCO类型,接口,包含匿名类型的后期绑定对象等。
基本例子
var customer = new Customer Name="Joe Bloggs", Age=31 ;
var json = JsonSerializer.SerializeToString(customer);
var fromJson = JsonSerializer.DeserializeFromString<Customer>(json);
注意:如果性能对您不重要,请仅使用Microsofts JavaScriptSerializer,因为我不得不将其从基准测试中删除,因为它比其他JSON序列化器慢40x-100x。
如果您需要复杂的结果(嵌入式),请创建自己的结构:
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 = tick以上是关于如何在C#中创建JSON字符串的主要内容,如果未能解决你的问题,请参考以下文章
目标 C:从字典错误中创建一个 json 对象。字典值只能是字符串