如何在C#中创buildJSONstring
我只是使用XmlWriter来创build一些XML在HTTP响应中发回。 你将如何创build一个JSONstring。 我假设你只是使用一个stringbuilder来构buildJSONstring,并将它们的响应格式设置为JSON?
你可以使用JavaScriptSerializer类 ,检查这篇文章来构build一个有用的扩展方法。
来自文章的代码:
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 Person{ID = 1, FirstName = "Scott", LastName = "Gurthie"}, new Person{ID = 2, FirstName = "Bill", LastName = "Gates"} }; string jsonString = people.ToJSON();
使用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);
文档: 序列化和反序列化JSON
这个库对于来自C#的JSON非常有用
此代码片段使用.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这是目前最快的.NET JSON序列化器 。 它支持序列化DataContracts,任何POCOtypes,接口,包括匿名types等的后期绑定对象。
基本例子
var customer = new Customer { Name="Joe Bloggs", Age=31 }; var json = JsonSerializer.SerializeToString(customer); var fromJson = JsonSerializer.DeserializeFromString<Customer>(json);
注意:如果性能对你并不重要,那么只能使用微软的JavaScriptSerializer,因为我不得不把它从基准testing中解脱出来,因为它比其他JSON序列化器慢了40倍到100倍 。
如果你不能或不想使用两个内置的JSON序列化器( JavaScriptSerializer和DataContractJsonSerializer ),你可以试试JsonExSerializer库 – 我在很多项目中使用它,并且工作得很好。
如果你需要复杂的结果(embedded式)创build你自己的结构:
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; } }; }
然后你可以通过调用获得JSONstring
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);
结果将是这样的:
json = "{\"registration_ids\":[\"id1\",\"id2\"],\"data\":{\"message\":\"Your message\",\"tickerText\":\"Your ticket\",\"contentTitle\":\"Your content\"}}"
希望它有帮助!
如果您尝试创build一个Web服务以通过JSON将数据提供给网页,请考虑使用ASP.NET Ajax工具包:
http://www.asp.net/learn/ajax/tutorial-05-cs.aspx
它会自动将通过web服务提供的对象转换为json,并创build可用于连接的代理类。
DataContractJSONSerializer将为您做所有事情,就像XMLSerializer一样简单。 它在web应用程序中使用它是微不足道的。 如果您正在使用WCF,您可以使用一个属性指定它的使用。 DataContractSerializer系列也非常快。
我发现你根本不需要序列化器。 如果将对象作为List返回。 让我用一个例子。
在我们的asmx中,我们使用我们传递的variables来获取数据
// 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我们访问服务,传递这个variables。
// 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,“mike”],[5,“dummy”]]
漂亮的用法
漂亮的打印JSON数组PrettyPrintJson()string扩展方法
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" ] ] ]
- SignalR 2.0错误:无法加载文件或程序集Microsoft.Owin.Security
- AntiXss.HtmlEncode和HttpUtility.HtmlEncode有什么区别?
- Nodejs vs SignalR:为什么我们需要服务器端的JavaScript?
- 如何使用ASP.NET Identity 2.0.1强制传播angular色更改给用户?
- 在代码隐藏中获取ASP.Net页面的URL
- 如何在C#中更新查询string?
- 当使用.net MVC RadioButtonFor(),你如何分组,所以只能做出一个select?
- 页面会在Google Chrome中加载两次
- 如何编辑.csproj文件