C# 使用Json.NET序列化程序对某些属性(而不是其他属性)进行CAME大小写
我正在使用Newtonsoft.JSON序列化此格式的对象:C# 使用Json.NET序列化程序对某些属性(而不是其他属性)进行CAME大小写,c#,json.net,C#,Json.net,我正在使用Newtonsoft.JSON序列化此格式的对象: class Message { public HeaderType Header { get; set; } public object Body { get; set; } } 我想将标题和正文属性转换为驼峰大小写,同时显示分配给正文的对象属性的大小写 因此,如果消息看起来像: var result = new Message() { Header = myHeader, Body = new SomeClass(
class Message
{
public HeaderType Header { get; set; }
public object Body { get; set; }
}
我想将标题
和正文
属性转换为驼峰大小写,同时显示分配给正文
的对象属性的大小写
因此,如果消息看起来像:
var result = new Message() { Header = myHeader, Body = new SomeClass() { A = 1 }});
我希望输出看起来像:
{ header = myHeader, body = { A = 1 } } // I realize this isn't valid C#
现在,我这样做是为了得到驼峰案例转换,但它当然会影响一切
string stringRepresentationOfObj = JsonConvert.SerializeObject(obj, new JsonSerializerSettings {
ContractResolver = new DefaultContractResolver {
NamingStrategy = new CamelCaseNamingStrategy()
}
});
有没有办法忽略对象的某些部分?我知道这是我的要求,但看起来这不是我想要的
我是否被迫使用某种自定义命名策略?如何实现这一点?您可以创建自己的冲突解决程序来实现这一点
您可以创建一个,可能让它查找一个新属性(您要创建的),然后您可以使用它来装饰您不希望使用camelCased的属性。您可以配置一个
CamelCaseNamingStrategy
以避免使用属性指定名称的camelcase属性,请查看文档
指定属性名称,如下所示
[JsonProperty(PropertyName = "Name")]
public string Name{ get; set; }
{
"header": {
"myPropertyA": "AAA",
"myPropertyB": "BBB"
},
"body": {
"ObjectPropertyA": "Value A",
"ObjectPropertyB": "Value B",
"ObjectPropertyC": "Value C"
}
}
在CamelCaseNamingStrategy
setOverrideSpecifiedNames=false
string stringRepresentationOfObj = JsonConvert.SerializeObject(obj, new JsonSerializerSettings
{
ContractResolver = new DefaultContractResolver
{
NamingStrategy = new CamelCaseNamingStrategy()
{
OverrideSpecifiedNames = false
}
}
});
另一种方法是只使用JsonObject
属性修改您的类型,如下所示,
这将强制您的类型属性仅在camelCase中,并且任何嵌套属性都不会受到影响
[JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))]
public class ApiMessage
{
public HeaderType Header { get; set; }
public object Body { get; set; }
}
另外,将JsonObject
属性添加到HeaderType
类中
[JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))]
public class HeaderType
{
public string MyPropertyA { get; set; }
public string MyPropertyB { get; set; }
}
您的结果应如下所示
[JsonProperty(PropertyName = "Name")]
public string Name{ get; set; }
{
"header": {
"myPropertyA": "AAA",
"myPropertyB": "BBB"
},
"body": {
"ObjectPropertyA": "Value A",
"ObjectPropertyB": "Value B",
"ObjectPropertyC": "Value C"
}
}
我不希望
Body
上的任何属性都是驼峰式的。如果我能帮忙的话,我宁愿不要强迫每个人都把他们的财产归为属性。例如,您可以将命名策略配置为类的属性,如(强制默认值)和(强制大小写)所示。这就是您想要的吗?OverrideSpecifiedNames
默认设置为false。其次,我正在寻找一种解决方案,不必使用JsonProperty
为每个属性赋予属性。想象一下,Body
的价值来自上帝知道的地方,而我却无法获得它。我一直在寻找一个更通用的解决方案,使Body
中的每个属性都不会变成驼峰大小写。它排除了一个类的所有道具。在我的例子中,我有一个名为Body
的属性,我想排除它的所有属性。看起来该属性应用于整个类。我希望所有内容都是camelcased,除了正文中的属性
。您将标题更改为字符串,但在我的示例中不是。这是一个对象,我仍然想用驼峰来计算它的属性。这个答案救了我,而且显然很罕见,在搜索了一个小时的NamingStrategy排除项后,花了很长时间才找到它