【发布时间】:2009-04-22 04:34:27
【问题描述】:
知道怎么做吗?如果不可能,有什么好的 C# JSON 库?
【问题讨论】:
知道怎么做吗?如果不可能,有什么好的 C# 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);
【讨论】:
System.Json 软件包已停产。您可以在框架本身中找到相应的类。
这是一个将任何对象实例序列化为 JSON 的扩展方法:
public static class GenericExtensions
{
public static string ToJsonString<T>(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<DesJson>(sJson);
Console.WriteLine(json.Name);
}
}
class DesJson {
public string Name {get; set;}
}
【讨论】:
另一种选择是使用 Mono 的 System.Json 实现, 通过一些小的改动,我能够将它反向移植到 C# 2.0。
您可以从here 下载我的 C# 2.0 项目。
【讨论】: