C#中的JSON入门

时间:2012-11-23 05:29:02

标签: c# .net xml json

我正在构建一个简单的Twitter应用程序。我原本想使用XML,但在我做了一点搜索后发现JSON更好更快,所以我决定使用它。

然而,在搜索了几个小时后,我找不到一个使用.net库为JSON的单一hello world教程。所有教程都指出使用JSON的第三方库。因为我不能使用.net中的任何东西,所以有人会给我一些关于如何开始的花絮。

特别是在.net4.0上使用System.Runtime.Serialization.Json

4 个答案:

答案 0 :(得分:1)

对于使用泛型对象的任意Json的一个反序列化方法,请参阅我的答案:

C# deserialize dynamic JSON

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

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

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

答案 1 :(得分:0)

转到此链接MSDN JSON

但是,与互联网上提供的其他库相比,此库不包含更多功能。另外,它们是开源的。所以如果你改变主意,请通过as
首先确定您要使用的库,例如:

1. JSON.NET
2. JSON-Sharp
3. Newtonsoft.JSON
和许多其他人(List of JSON libraries
然后根据图书馆找到教程。

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

答案 2 :(得分:0)

我对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);
    

答案 3 :(得分:0)

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