【Newtonsoft.Json Json.Net】02、序列化与反序列化Json

Json.Net提供2种方式进行Json和.Net对象之间的转换

JsonConver

一个比较简单的方法,用于一般场景,提供SerializeObject()和DeserializeObject()方法进行序列化和反序列化。

这是JsonSerialIzer的一个简单的封装。

用法如下:

Product product = new Product();

product.Name = "Apple";
product.ExpiryDate = new DateTime(2008, 12, 28);
product.Price = 3.99M;
product.Sizes = new string[] { "Small", "Medium", "Large" };

string output = JsonConvert.SerializeObject(product);
//{
//  "Name": "Apple",
//  "ExpiryDate": "2008-12-28T00:00:00",
//  "Price": 3.99,
//  "Sizes": [
//    "Small",
//    "Medium",
//    "Large"
//  ]
//}

Product deserializedProduct = JsonConvert.DeserializeObject<Product>(output);

 SerializeObject()和DeserializeObject()有一个重载版本,带一个JsonSerializerSettings类型参数,支持使用这个简单方法的时候,仍然可以使用JsonSerializer的一些设置。

JsonSerializer

为了更好地控制这个对象如何转换,可以直接使用JsonSerializer。

JsonSerializer通过JsonTextReader和JsonTextWriter可以直接进行Json和字节流之间的转换。

其它JsonReader和JsonWriter也可以使用,如:

JTokenReader/JTokenWriter用于对象与LINQ to JSON对象之间的转换;

BsonReader/BsonWriter用于对象与BSON之间的转换。

Product product = new Product();
product.ExpiryDate = new DateTime(2008, 12, 28);

JsonSerializer serializer = new JsonSerializer();
serializer.Converters.Add(new JavaScriptDateTimeConverter());
serializer.NullValueHandling = NullValueHandling.Ignore;

using (StreamWriter sw = new StreamWriter(@"c:\json.txt"))
using (JsonWriter writer = new JsonTextWriter(sw))
{
    serializer.Serialize(writer, product);
    // {"ExpiryDate":new Date(1230375600000),"Price":0}
}

JsonSerializer有多个属性,用于自定义如何序列化JSON。这些也可以通过JsonSerializerSettings参数,在JsonConvert上使用。

扫描二维码关注公众号,回复: 887077 查看本文章

猜你喜欢

转载自www.cnblogs.com/LiveYourLife/p/9049342.html