动作方法的JSON驼峰案例属性

时间:2018-08-29 17:10:19

标签: c# asp.net-mvc api

我的控制器中有这样的端点:

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或格式化整个控制器不是我的情况。

3 个答案:

答案 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")]