我的控制器中有这样的端点:
public async Task<<IEnumerable<ItemsList>>> GetItems()
{
List<ItemsList>> items = await _itemManager.GetItemsAsync();
return items;
}
当我从该端点获得结果时:
{
"Type": "SomeType",
"Items":[{"Id":1,"ItemType":"SomeType"}]
}
但我想成为骆驼套,例如:
{
"type": "SomeType",
"items":[{"id":1,"itemType":"SomeType"}]
}
这里是
public class ItemsList
{
public ItemType Type { get; set; }
public List<Items> Items { get; set; }
}
public class Item
{
public int ItemId { get; set; }
public ItemType ItemType { get; set; }
}
我找到了类似的解决方案:
public async Task<<IEnumerable<ItemsList>>> GetItems()
{
List<ItemsList>> items = await _itemManager.GetItemsAsync();
var serializerSettings = new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
return Json(items),serializerSettings);
}
所以,我要做的是创建Attribute,可以将其应用于特定端点,并从该端点生成结果为camelCase。
将Json属性应用于Dto或格式化整个控制器不是我的情况。
答案 0 :(得分:0)
我喜欢使用DataMemberAttribute
中的System.Runtime.Serialization
示例:
[Serializable]
[DataContract]
public class SomeDto
{
[DataMember(Name = "unitCount")]
public int UnitCount { get; set; }
[DataMember(Name = "packagingType")]
public PackagingType PackagingTypeIdEtc { get; set; }
// ...
输出为camelCase,您还可以控制emitDefaultValue
之类的东西。
{
unitCount: 3,
packagingType: "box",
/* ... */
}
答案 1 :(得分:0)
请尝试在Register
下的WebApiConfig
函数中放入
public static void Register(HttpConfiguration config)
{
config.Formatters.Clear();
config.Formatters.Add(new JsonMediaTypeFormatter());
config.Formatters.JsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractresolvder();
}
答案 2 :(得分:-1)
在实体上,您可以使用:
[JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))]
在属性上,您可以使用:
[JsonProperty(NamingStrategyType = typeof(CamelCaseNamingStrategy))]
此外,如果需要,您还可以在属性上手动指定属性名称:
[JsonProperty(PropertyName = "myPropertyName")]