C# JObject&;使用JSON.Net进行CamelCase转换
如何将通用JObject转换为camelCase纯json字符串? 我尝试过JsonSerializerSettings,但没有成功(Newtonsoft.Json 4.5.11) 更新 根据无法完成的操作(链接为tnx到@nick_w)根据,当序列化作业对象时,以这种方式忽略合同解析程序: 序列化作业对象时,似乎忽略了契约解析程序。这肯定不是应该的情况吗?C# JObject&;使用JSON.Net进行CamelCase转换,c#,json.net,C#,Json.net,如何将通用JObject转换为camelCase纯json字符串? 我尝试过JsonSerializerSettings,但没有成功(Newtonsoft.Json 4.5.11) 更新 根据无法完成的操作(链接为tnx到@nick_w)根据,当序列化作业对象时,以这种方式忽略合同解析程序: 序列化作业对象时,似乎忽略了契约解析程序。这肯定不是应该的情况吗? 于2013年1月30日上午8:50由 这确实有道理,但恐怕这是一个太大的突破性变化 受该页面解决方案的启发,您可以执行以下操作: var
于2013年1月30日上午8:50由
这确实有道理,但恐怕这是一个太大的突破性变化 受该页面解决方案的启发,您可以执行以下操作:
var jo = new JObject();
jo["CamelCase"] = 1;
string json = JsonConvert.SerializeObject(jo);
var jObject = JsonConvert.DeserializeObject<ExpandoObject>(json);
var settings = new JsonSerializerSettings()
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
var serialized = JsonConvert.SerializeObject(jObject, settings);
Assert.AreEqual("{\"camelCase\":1}", serialized);
这个问题从一个JObject开始,并希望处理一个驼峰式JSON对象。如果您实际上是从一个对象开始,并且想要访问一个已经camelcased的JObject,那么您可以执行以下操作:
var serializer = new JsonSerializer()
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
var jo = JObject.FromObject(someDataContract, serializer);
由此产生的“jo”将被简化。截至2013年5月8日,詹姆斯·牛顿·金(James Newton King)就Json.NET的5.0版本发表了一篇博文,这一点已通过添加“DefaultSettings”得到解决。该页面的示例如下,但请阅读该页面以了解第三方库的详细信息
// settings will automatically be used by JsonConvert.SerializeObject/DeserializeObject
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
Formatting = Formatting.Indented,
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
Employee e = new Employee
{
FirstName = "Eric",
LastName = "Example",
BirthDate = new DateTime(1980, 4, 20, 0, 0, 0, DateTimeKind.Utc),
Department = "IT",
JobTitle = "Web Dude"
};
string json = JsonConvert.SerializeObject(e);
// {
// "firstName": "Eric",
// "lastName": "Example",
// "birthDate": "1980-04-20T00:00:00Z",
// "department": "IT",
// "jobTitle": "Web Dude"
// }
}不要认为serialize+deserialize+serialize效率太高。作为一种解决方法,我已从JObject do Dictionary切换。谢谢,我使用了
Dictionary
如何执行相反的操作:JObject.Load(jsonReader)
通过指定解析程序?使用JObject
实例方法来尝试此操作
但它不起作用,我试过了,它不起作用,因为meJObject没有序列化,它是按“原样”编写的,所以这个答案不起作用。
var serializer = new JsonSerializer()
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
var jo = JObject.FromObject(someDataContract, serializer);
// settings will automatically be used by JsonConvert.SerializeObject/DeserializeObject
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
Formatting = Formatting.Indented,
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
Employee e = new Employee
{
FirstName = "Eric",
LastName = "Example",
BirthDate = new DateTime(1980, 4, 20, 0, 0, 0, DateTimeKind.Utc),
Department = "IT",
JobTitle = "Web Dude"
};
string json = JsonConvert.SerializeObject(e);
// {
// "firstName": "Eric",
// "lastName": "Example",
// "birthDate": "1980-04-20T00:00:00Z",
// "department": "IT",
// "jobTitle": "Web Dude"
// }
public static JsonSerializer FormattingData()
{
var jsonSerializersettings = new JsonSerializer {
ContractResolver = new CamelCasePropertyNamesContractResolver() };
return jsonSerializersettings;
}
public static JObject CamelCaseData(JObject jObject)
{
var expandoConverter = new ExpandoObjectConverter();
dynamic camelCaseData =
JsonConvert.DeserializeObject(jObject.ToString(),
expandoConverter);
return JObject.FromObject(camelCaseData, FormattingData());