我正在构建一个简单的 Twitter 应用程序。我最初想使用 XML,但在我做了一些搜索后发现 JSON 更好更快,所以我决定使用它。
然而,在搜索了几个小时后,我找不到一个使用 .net 库作为 JSON 的单一 hello world 教程。所有教程都指出将第三方库用于 JSON。由于我不能使用.net 之外的任何东西,有人会给我一些关于如何开始的花絮。
具体System.Runtime.Serialization.Json
在.net4.0上使用
对于使用通用对象的任意 Json 的一种反序列化方法,请参阅我的答案:
对于序列化,我对 ToJson 的 ServiceStack.Text 实现很满意。
https://github.com/ServiceStack/ServiceStack.Text
如果您在他们的网站上使用一些工具,您也可以找到预编译的二进制文件以进行下载。不要害怕 ServiceSTack 所做的所有其他事情(除非它可以帮助您——您只需要 ServiceStack.Text 命名空间)。
我在 JSON 方面没有更多经验,但目前我正在处理 JSON 序列化和反序列化,而不使用任何第三方 JSON 库。请按照以下步骤操作:
创建用于序列化任何对象的通用实用程序:使用 System; 使用 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);
}
}
}
然后在要序列化的地方添加 Test.Utility 引用:
using Test.Utility;
然后为 JSON 序列化编写代码:
var Info = new
{
TeamCode = TeamCodeTxt.Text,
TeamName = TeamNameTxt.Text
};
字符串 jsonSerializedStr=CommonUtility.SerializeJson(Info);
编写反序列化代码:
class TestInfo
{
public TeamCode{set;get;}
public TeamName{set;get;}
}
Info objInfo=new Info();
objInfo=serializer.Deserialize<TestInfo>(Info);
使用 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)
转到此链接MSDN JSON
但与 Internet 上可用的其他库相比,此库不包含更多功能。另外,它们是开源的。因此,如果您改变主意,请
首先确定要使用的库,例如:
1. JSON.NET
2. JSON-Sharp
3. Newtonsoft.JSON
和许多其他库(JSON 库列表)
然后找到根据图书馆的教程。
我更喜欢 Newtonsoft,因为它有一些附加功能。
还要考虑查看每个库的规范,因为它们为某些数据类型(例如 dateTime)提供略有不同的实现(如果您不使用跨平台通信,例如 java 中的生产者和 C# 中的消费者,反之亦然)。