我正在使用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) 我正在使用 Newtonsoft.JSON 序列化此格式的对象:
class Message
{
public HeaderType Header { get; set; }
public object Body { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想将Header和Body属性转换为驼峰式大小写,同时保留分配给 的事物的属性的大小写Body。
因此,如果消息看起来像:
var result = new Message() { Header = myHeader, Body = new SomeClass() { A = 1 }});
Run Code Online (Sandbox Code Playgroud)
我希望输出看起来像:
{ header = myHeader, body = { A = 1 } } // I realize this isn't valid C#
Run Code Online (Sandbox Code Playgroud)
现在,我这样做是为了进行驼峰式大小写转换,但当然它会影响一切。
string stringRepresentationOfObj = JsonConvert.SerializeObject(obj, new JsonSerializerSettings {
ContractResolver = new DefaultContractResolver …Run Code Online (Sandbox Code Playgroud)