无法转换为json响应到camel case newtonsoft.. json和microt.net . sdk .



我正在尝试转换从Pascalcase到camelCase的json响应中的键我用的是Microsoft.NET.Sdk.Functions 1.0.24,newtonsoft。Json 12.0.1和visual studio 16.2

req.GetConfiguration().Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 

但它不工作,我得到这个错误

方法未找到:'Newtonsoft.Json.JsonSerializerSettings System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.get_SerializerSettings()'

我试图降级newtonsoft。json 9.0.1它也不能工作,这里是错误

无法加载文件或程序集Newtonsoft。Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken='或其依赖项之一。系统找不到指定的

文件

我还找到了一篇关于最低Newtonsoft的文章。每个visual studio版本支持的Json版本

我花了两天的时间来解决这个问题,有什么建议我应该做什么来解决这个问题吗?

在我看来,这里有几个选项。您应该能够使用以下方法转换Pascal大小写json字符串:

[FunctionName("JsonDeserializeObject")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
ILogger log) {
var jsonBody = await req.ReadAsStringAsync();
var description = DeserializeTypeCamelCase<Description>(jsonBody);
var camelCaseJson = JsonConvert.SerializeObject(description);
return new OkObjectResult(camelCaseJson);
}
public static T DeserializeTypeCamelCase<T>(string json) {
var settings = new JsonSerializerSettings {
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
return JsonConvert.DeserializeObject<T>(json, settings);
}
public class Description {
public string title;
public string units;
public string basePeriod;
}
}

然而,我不明白你所能做的是什么。我建议使用Regex来编辑json字符串。它也会更快。您可能需要一次解析大量数据,而序列化和反序列化并不是一个好主意。

public static string RegexCamelCaseJson(string json) {
return Regex.Replace(json, ""([A-Z])(\w+?)":",
match => @$"""{match.Groups[1].Value.ToLower()}{match.Groups[2]}"":");
}

这个函数,regexcelcasejson,应该做你正在寻找的,并且更快。

最新更新