我只是使用XmlWriter创建了一些XML,以便在HTTP响应中发回。如何创建JSON字符串?我猜你会使用stringbuilder来构建JSON字符串,然后将响应格式化为JSON?


当前回答

你也可以试试我的ServiceStack JsonSerializer,它是目前最快的。net JSON序列化器。它支持序列化数据契约、任何POCO类型、接口、晚期绑定对象(包括匿名类型)等。

基本的例子

var customer = new Customer { Name="Joe Bloggs", Age=31 };
var json = JsonSerializer.SerializeToString(customer);
var fromJson = JsonSerializer.DeserializeFromString<Customer>(json); 

注意:如果性能对您来说不重要,请只使用microsoft JavaScriptSerializer,因为它比其他JSON序列化器慢了40 -100倍,所以我不得不将它排除在基准测试之外。

其他回答

如果你不能或不想使用两个内置的JSON序列化器(JavaScriptSerializer和DataContractJsonSerializer),你可以尝试JsonExSerializer库——我在许多项目中使用它,工作得很好。

如果您试图创建一个web服务,通过JSON向web页面提供数据,请考虑使用ASP。. NET Ajax工具包:

http://www.asp.net/learn/ajax/tutorial-05-cs.aspx

它会自动将你通过webservice服务的对象转换为json,并创建你可以用来连接到它的代理类。

使用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

如果你想避免创建一个类和创建JSON,那么创建一个动态对象和序列化对象。

            dynamic data = new ExpandoObject();
            data.name = "kushal";
            data.isActive = true;

            // convert to JSON
            string json = Newtonsoft.Json.JsonConvert.SerializeObject(data);

读取JSON并像这样反序列化:

            // convert back to Object
            dynamic output = Newtonsoft.Json.JsonConvert.DeserializeObject(json);

            // read a particular value:
            output.name.Value

ExpandoObject来自System。动态名称空间。

这个代码片段使用了。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());
    }
}