使用System.Json进行非Silverlight项目?

有什么想法怎么做? 如果不可能,C#的JSON库是什么?

Json.NET是一个很棒的.NET json库。 支持LINQ,读取/写入以及将对象转换为json。

System.Json现在可以通过NuGet (.Net的包管理系统)在非Silverlight项目中使用,并且有望在vnext中作为核心框架的一部分发布。 NuGet包名为JsonValue 。

想象一下,我们在字符串变量json有以下JSON:

 [{"a":"foo","b":"bar"},{"a":"another foo","b":"another bar"}] 

我们可以使用以下代码将值“另一个条”写入控制台:

 using System.Json; dynamic jsonObj = JsonValue.Parse(json); var node = jsonObj[1].b; System.Console.WriteLine(node.Value); 

这是一个将任何对象实例序列化为JSON的扩展方法:

 public static class GenericExtensions { public static string ToJsonString(this T input) { string json; DataContractJsonSerializer ser = new DataContractJsonSerializer(input.GetType()); using (MemoryStream ms = new MemoryStream()) { ser.WriteObject(ms, input); json = Encoding.Default.GetString(ms.ToArray()); } return json; } } 

您需要添加对System.ServiceModel.Web的引用才能使用DataContractSerializer。

如果你只是在寻找JSON编码/解码,那么有一个来自Microsoft的官方System.Web扩展库就可以了,很可能你已经有了这个程序集(System.Web.Extensions):

http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx

例:

 using System; using System.Web.Script.Serialization; class App { static void Main(string[] args = null) { JavaScriptSerializer jss = new JavaScriptSerializer(); String sJson = "{\"Name\": \"Your name\"}"; DesJson json = jss.Deserialize(sJson); Console.WriteLine(json.Name); } } class DesJson { public string Name {get; set;} } 

另一个选择是使用Mono的System.Json实现,我能够通过一些小的改动将它反向移植到C#2.0。

您只需从此处下载我的C#2.0项目即可。