【问题标题】:Using System.Json for non-Silverlight projects?将 System.Json 用于非 Silverlight 项目?
【发布时间】:2009-04-22 04:34:27
【问题描述】:

知道怎么做吗?如果不可能,有什么好的 C# JSON 库?

【问题讨论】:

    标签: c# .net json


    【解决方案1】:

    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 软件包已停产。您可以在框架本身中找到相应的类。
    • 所有者已取消列出此包 :(
    • @PatrickHofman:你指的是哪个版本?上一个几乎稳定的版本是nuget.org/packages/System.Json,但现在他们也弃用了它。
    • 现在是 4.6.2 的一部分!
    • 也可作为 Nuget 包提供(带有最新更新)
    【解决方案2】:

    这是一个将任何对象实例序列化为 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。

    【讨论】:

      【解决方案3】:
      【解决方案4】:

      如果您只是在寻找 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;}
      }
      

      【讨论】:

        【解决方案5】:

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

        您可以从here 下载我的 C# 2.0 项目。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-03-14
          • 2020-02-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多