相关疑难解决方法(0)

Newtonsoft JsonSerializer - 小写属性和字典

我正在使用json.net(Newtonsoft的JsonSerializer).我需要自定义序列化以满足以下要求:

  1. 属性名称必须以小写字母开头.
  2. 必须将字典序列化为jsonp,其中键将用于属性名称.LowerCase规则不适用于字典键.

例如:

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)

c# json.net

52
推荐指数
2
解决办法
5万
查看次数

使用 Json.NET 序列化程序对某些属性进行驼峰式大小写,但不对其他属性进行驼峰式大小写

我正在使用 Newtonsoft.JSON 序列化此格式的对象:

class Message
{
    public HeaderType Header { get; set; }
    public object Body { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想将HeaderBody属性转换为驼峰式大小写,同时保留分配给 的事物的属性的大小写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)

c# json.net

5
推荐指数
2
解决办法
1万
查看次数

标签 统计

c# ×2

json.net ×2