我正在使用json.net(Newtonsoft的JsonSerializer).我需要自定义序列化以满足以下要求:
例如:
var product = new Product();
procuct.Name = "Product1";
product.Items = new Dictionary<string, Item>();
product.Items.Add("Item1", new Item { Description="Lorem Ipsum" });
Run Code Online (Sandbox Code Playgroud)
必须序列化为:
{
name: "Product1",
items : {
"Item1": {
description : "Lorem Ipsum"
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意属性Name序列化为"name",但键Item1序列化为"Item1";
我试图创建CustomJsonWriter来序列化属性名称,但它也改变了dicionary键.
public class CustomJsonWriter : JsonTextWriter
{
public CustomJsonWriter(TextWriter writer) : base(writer)
{
}
public override void WritePropertyName(string name, bool escape)
{
if (name != "$type")
{
name = name.ToCamelCase();
}
base.WritePropertyName(name, escape);
}
}
Run Code Online (Sandbox Code Playgroud)
Cra*_* W. 111
你可以尝试使用CamelCasePropertyNamesContractResolver.
var serializerSettings = new JsonSerializerSettings();
serializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
var json = JsonConvert.SerializeObject(product, serializerSettings);
Run Code Online (Sandbox Code Playgroud)
我只是不确定它将如何处理字典键,我没有时间在第二次尝试它.如果它没有正确处理密钥,那么仍然值得记住未来,而不是编写自己的自定义JSON编写器.
Bri*_*arm 47
您可以使用JsonProperty来更改某些内容的序列化/反序列化.定义对象时,将属性项添加到要在JSON中以不同方式表示的字段中.这仅适用于NewtonsoftJSON.其他图书馆可能采用不同的方式
public class Product
{
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("items")]
public Dictionary<string, Item> Items { get; set; }
}
public class Item
{
[JsonProperty("description")]
public string Description { get; set; }
}
Run Code Online (Sandbox Code Playgroud)