为什么Azure Functions JSON序列化会将类属性名称转换为驼峰式和小写?

23c0lvtd  于 2022-12-15  发布在  其他
关注(0)|答案(1)|浏览(119)

我有一个Azure Function V4。这是一个返回IActionResult的Http触发函数。我期望输出JSON的属性名称应与C#类的属性名称的字母大小写完全匹配。但JSON序列化会将属性名称转换为驼峰式大小写和小写。
我希望JSON对象属性名称的字母大小写与该模型的C#类成员名称的字母大小写完全匹配。
C#对象

public string JobId { get; set; }
public List<Contact> Contacts { get; set; }
public Tags Tags { get; set; }
    

public class Contact
{
    public string firstName { get; set; }
}
    
public class Tags
{
    public string GROUPCONTACT { get; set; }
}

JSON结果实际值

{
    "jobId": null,
    "contacts": [
        {
            "firstName": "dummy"
        }
    ],
    "tags": {
        "groupcontact": "dummy"
    }
}

预期JSON结果

{
    "JobId": null,
    "Contacts": [
        {
            "firstName": "dummy"
        }
    ],
    "Tags": {
        "GROUPCONTACT": "dummy"
    }
}
jdgnovmf

jdgnovmf1#

正如注解中提到的@dbc,您必须指定PropertyNamingPolicy = null而不是PropertyNamingPolicy = JsonNamingPolicy.CamelCase以保持属性名不变。

var serializeOptions = new JsonSerializerOptions 
{
 PropertyNamingPolicy = null 
};

如果使用驼峰式属性命名策略(PropertyNamingPolicy = JsonNamingPolicy.CamelCase),则可以使用[JsonPropertyName]属性覆盖属性名称,如下所示:

public class Contact
    {
        public string firstName { get; set; }
    }
        
    public class Tags
    {
        [JsonPropertyName(Details)]
        public string GROUPCONTACT { get; set; }
    }

输出:

{
        "contacts": [
            {
                "firstName": "XXXXX"
            }
        ],
        "tags": {
            "Details": "XXXXX"
        }
    }

相关问题