我有一堆类,它们将在某个时候被序列化为JSON,为了在后端遵循C#约定,在前端遵循JavaScript约定,我定义了这样的属性:
[JsonProperty(PropertyName="myFoo")]
public int MyFoo { get; set; }
在C#中,我们可以:
MyFoo = 10;
在Javascript中,我可以:
if (myFoo === 10)
但是对每个属性都这样做是很繁琐的,有没有一种快速简单的方法来设置JSON.Net处理属性名的默认方式,这样除非另有说明,否则它会自动大小写转换?
8条答案
按热度按时间wrrgggsh1#
可以使用提供的类Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver:
换句话说,您不必自己创建自定义冲突解决程序。
nxagd54h2#
序列化对象时,传入一些自定义设置。
sqxo8psd3#
最好使用新的
CamelCaseNamingStrategy
(自9.0.1起):默认情况下,它不会覆盖由属性
JsonProperty("Name")
设置的自定义名称。(您可以通过CamelCaseNamingStrategy(bool, bool)
ctor更改行为。)因此,不需要像@Matt Burland的答案那样创建自定义类。7rtdyuoh4#
JObject.FromObject
使用来自JsonConvert
默认值的默认设置。您可以像这样分配func属性:无论何时调用
Jobject.FromObject
,它都会使用这个函数来构造设置。gcuhipw95#
由于接受的答案是仅链接,所以我添加了我最终使用的实际代码(以防链接死亡)。它与链接中的内容基本相同:
我所做的唯一更改是在if子句中添加了
attr.PropertyName != null
,因为我在这里添加了如下内容:并且不想指定
PropertyName
(所以它是null)。上面的内容将在JSON中序列化为someProperty
。cygmwpex6#
您可以使用自定义contract resolver:
像这样使用它:
8wigbo567#
在.NET 5.0中,您可以使用System.Text.Json并在JsonSerializerOptions中指定PropertyNamingPolicy
System.Text.Json.JsonSerializerOptions.PropertyNamingPolicy
这里有一个指向Microsoft文档页面的链接,该页面将属性设置为使用 Camel 大小写。
班级
JSON输出
goqiplq28#