cul*_*lix 415 c# serialization json.net
我在C#DataSet对象中有一些数据.我现在可以使用像这样的Json.net转换器来序列化它
DataSet data = new DataSet();
// do some work here to populate 'data'
string output = JsonConvert.SerializeObject(data);
Run Code Online (Sandbox Code Playgroud)
但是,这会data
在打印到.json文件时使用属性名称.我想将属性名称更改为不同的名称(例如,将'foo'更改为'bar').
在Json.net文档中,在"序列化和反序列化JSON"→"序列化属性"下,它表示"JsonPropertyAttribute ...允许自定义名称".但没有例子.有谁知道如何使用JsonPropertyAttribute将属性名称更改为其他名称?
(直接链接到文档)
Json.net的文档似乎很少.如果你有一个很好的例子,我会尝试将它添加到官方文档中.谢谢!
Dar*_*rov 759
您可以使用[JsonProperty]
允许您指定其他名称的属性来装饰您希望控制其名称的属性:
using Newtonsoft.Json;
// ...
[JsonProperty(PropertyName = "FooBar")]
public string Foo { get; set; }
Run Code Online (Sandbox Code Playgroud)
文档:序列化属性
Sti*_*ack 69
如果您无权访问类以更改属性,或者不希望始终使用相同的重命名属性,则还可以通过创建自定义解析程序来重命名.
例如,如果你有一个被调用的类MyCustomObject
,它有一个名为的属性LongPropertyName
,你可以使用这样的自定义解析器......
public class CustomDataContractResolver : DefaultContractResolver
{
public static readonly CustomDataContractResolver Instance = new CustomDataContractResolver ();
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
var property = base.CreateProperty(member, memberSerialization);
if (property.DeclaringType == typeof(MyCustomObject))
{
if (property.PropertyName.Equals("LongPropertyName", StringComparison.OrdinalIgnoreCase))
{
property.PropertyName = "Short";
}
}
return property;
}
}
Run Code Online (Sandbox Code Playgroud)
然后调用序列化并提供解析器:
var result = JsonConvert.SerializeObject(myCustomObjectInstance,
new JsonSerializerSettings { ContractResolver = CustomDataContractResolver.Instance });
Run Code Online (Sandbox Code Playgroud)
结果将缩短为{"Short":"prop value"}而不是{"LongPropertyName":"prop value"}
有关定制解析器的更多信息,请点击此处
还有另一种方法,可以使用特定的NamingStrategy,通过使用[JSonObject]
或装饰它们可以将其应用于类或属性[JsonProperty]
。
有一些预定义的命名策略,例如CamelCaseNamingStrategy
,但是您可以实现自己的命名策略。
可以在这里找到不同命名策略的实现:https : //github.com/JamesNK/Newtonsoft.Json/tree/master/Src/Newtonsoft.Json/Serialization
归档时间: |
|
查看次数: |
275978 次 |
最近记录: |