【问题标题】:Getting Started With JSON in C# [closed]C# 中的 JSON 入门 [关闭]
【发布时间】:2012-11-23 05:29:01
【问题描述】:

我正在构建一个简单的 Twitter 应用程序。我本来想用 XML,但经过一番搜索,发现 JSON 更好更快,所以我决定使用它。

但是,在搜索了几个小时后,我找不到一个使用 .net 库作为 JSON 的 hello world 教程。所有教程都指出将第三方库用于 JSON。由于我无法使用 .net 之外的任何东西,有人可以告诉我一些关于如何开始使用的花絮。

具体在.net4.0上使用System.Runtime.Serialization.Json

【问题讨论】:

  • 试试 JSON.NET。以下是一些示例:james.newtonking.com/projects/json-net.aspx
  • @2kay 正如我所说,我不能使用非 Microsoft 库。
  • @MikeTrusov 链接上的所有库都是第 3 方。我只能使用 .net 4.0 打包的库
  • 为什么你不能使用 3rd 方库?它是免费的,因此没有许可问题,也不需要安装 - 您只需将程序集转储到应用旁边的 bin 文件夹中...

标签: c# .net xml json


【解决方案1】:

对于使用通用对象的任意 Json 的一种反序列化方法,请在此处查看我的答案:

C# deserialize dynamic JSON

对于序列化,我对 ToJson 的 ServiceStack.Text 实现很满意。

https://github.com/ServiceStack/ServiceStack.Text

如果您在他们的网站上使用一些工具,您也可以找到预编译的二进制文件进行下载。不要害怕 ServiceSTack 所做的所有其他事情(除非它可以帮助您——您只需要 ServiceStack.Text 命名空间)。

【讨论】:

  • 您最初的问题是说没有.NET 之外的库——这与除了微软原生的东西之外什么都没有。尽管如此,反序列化部分要困难得多,这在另一个问题中有所描述。您也可以使用相同的 Native Microsoft 库进行序列化。
  • 抱歉含糊不清(英语不是我的母语)。它是一个学校项目,我仅限于使用微软在 .net 4.0(不是 4.5)中生产的东西
【解决方案2】:

使用 System.Runtime.Serialization.Json

[DataContract]
[Serializable]
public class SuperObj
{
  [DataMember]
  public string Foo { get; set; }

  [DataMember]
  public string Bar { get; set; }

  [DataMember]
  public int Baz { get; set; }

  [DataMember]
  public DateTime Qux { get; set; }
}

可以使用序列化为字符串

var serializer = new DataContractJsonSerializer(typeof(SuperObj));

using (var stream = new MemoryStream())
{
  serializer.WriteObject(stream, obj);
  var jsonString = Encoding.UTF8.GetString(stream.ToArray());
  Console.WriteLine(jsonString);
}

该字符串可以反序列化回一个对象

var serializer = new DataContractJsonSerializer(typeof(SuperObj));

using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))
{
  var obj2 = (SuperObj)serializer.ReadObject(stream);
  Console.WriteLine("SuperObj");
  Console.WriteLine(obj2.Foo);
  Console.WriteLine(obj2.Bar);
  Console.WriteLine(obj2.Baz);
  Console.WriteLine(obj2.Qux);
}

正如其他人所说,第三方库往往更好(我使用过 ServiceStack.Text 和 Json.Net)

【讨论】:

    【解决方案3】:

    转到此链接MSDN JSON

    但是与 Internet 上的其他库相比,该库不包含更多功能。另外,它们是开源的。因此,如果您改变主意,请按照
    首先决定你要使用哪个库,例如:

    1. JSON.NET
    2. JSON-Sharp
    3. Newtonsoft.JSON
    和许多其他 (List of JSON libraries)
    然后根据库查找教程。

    我更喜欢 Newtonsoft,因为它有一些附加功能。
    还要考虑查看每个库的规范,因为它们为某些数据类型(例如 dateTime)提供略有不同的实现(如果您不使用跨平台通信,例如 java 中的生产者和 C# 中的消费者,反之亦然)。

    【讨论】:

    • 除了 microsoft 在 .net 4.0 中生产之外,不能使用任何东西
    • 你可以在答案的开头找到链接。
    【解决方案4】:

    我在 JSON 方面没有更多经验,但目前我正在处理 JSON 序列化和反序列化,而不使用任何第三方 JSON 库。请按照以下步骤操作:

    1. 创建用于序列化任何对象的通用实用程序: 使用系统; 使用 System.Collections.Generic; 使用 System.Linq; 使用 System.Web; 使用 System.Web.Script.Serialization;

      namespace Test.Utility
      {
          public class CommonUtility
          {
              public static JavaScriptSerializer javaScriptSerializer = new    JavaScriptSerializer();
      
              public static string SerializeJson(object o)
              {
                  return javaScriptSerializer.Serialize(o);
              }
          }
      }
      
    2. 然后在要序列化的地方添加 Test.Utility 引用:

      using Test.Utility;
      
    3. 然后你为 JSON 序列化编写代码:

      var Info = new
      {
          TeamCode = TeamCodeTxt.Text,
          TeamName = TeamNameTxt.Text
      };
      

      String jsonSerializedStr=CommonUtility.SerializeJson(Info);

    4. 编写反序列化代码:

      class TestInfo
      {
          public TeamCode{set;get;}
          public TeamName{set;get;}
      }
      Info objInfo=new Info();
      objInfo=serializer.Deserialize<TestInfo>(Info);
      

    【讨论】:

      猜你喜欢
      • 2013-03-01
      • 2012-02-20
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      • 2023-03-04
      • 2012-08-11
      • 2011-07-25
      • 2012-08-12
      相关资源
      最近更新 更多