我只是使用XmlWriter创建了一些XML,以便在HTTP响应中发回。如何创建JSON字符串?我猜你会使用stringbuilder来构建JSON字符串,然后将响应格式化为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());
    }
}

其他回答

DataContractJSONSerializer将像XMLSerializer一样简单地为您做所有事情。在web应用程序中使用它很简单。如果你正在使用WCF,你可以用一个属性指定它的用途。DataContractSerializer系列也非常快。

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

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

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

编码使用

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],“笨蛋”]

漂亮的用法

Pretty print 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"
      ]
   ]
]

看看http://www.codeplex.com/json/上的json-net。aspx项目。为什么要重新发明轮子?

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