我正在使用json.net(Newtonsoft' JsonSerializer)。我需要自定义序列化以满足以下要求:
例如:
{
name: "Product1",
items : {
"Item1": {
description : "Lorem Ipsum"
}
}
}
必须序列化为:
public class CustomJsonWriter : JsonTextWriter
{
public CustomJsonWriter(TextWriter writer) : base(writer)
{
}
public override void WritePropertyName(string name, bool escape)
{
if (name != "$type")
{
name = name.ToCamelCase();
}
base.WritePropertyName(name, escape);
}
}
注意属性Name序列化为" name",但是键Item1序列化为" Item1&#34 ;;
我尝试创建CustomJsonWriter来序列化属性名称,但它也会更改dicionary键。
viewDidLayoutSubviews
答案 0 :(得分:87)
您可以尝试使用CamelCasePropertyNamesContractResolver
。
var serializerSettings = new JsonSerializerSettings();
serializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
var json = JsonConvert.SerializeObject(product, serializerSettings);
我只是不确定它是如何处理字典键的,而我没有时间在第二次尝试它。如果它没有正确处理密钥,那么对于未来仍然值得记住,而不是编写自己的自定义JSON编写器。
答案 1 :(得分:34)
您可以使用JsonProperty来更改某些内容的序列化/反序列化。定义对象时,将属性项添加到要在JSON中以不同方式表示的字段中。这仅适用于NewtonsoftJSON。其他图书馆也可能采用不同的方式。
// workaround to use threaded cuda context mode
Alea.CUDA.Settings.Instance.Worker.DefaultContextType <- "threaded"
// compile GPU code and keep the module live for a long time
use reduceModule = new DeviceReduceModule<float32>(GPUModuleTarget.Worker(worker),<@ (+) @>)
// now get a reducer from reduce module.
// this reduce object includes some temp memories for algorithm
use reducer = reduceModule.Create(maxReduceNumber)
reducer.Reduce(....)