我有这样一个 JSON 结构:
{
"name": "flare",
"children": [
{
"name": "analytics",
"children": [
{
"name": "cluster",
"children": [
{"name": "AgglomerativeCluster", "size": 3938},
{"name": "MergeEdge", "size": 743}
]
},
{
"name": "graph",
"children": [
{"name": "BetweennessCentrality", "size": 3534},
{"name": "SpanningTree", "size": 3416}
]
},
{
"name": "optimization",
"children": [
{"name": "AspectRatioBanker", "size": 7074}
]
}
]
},
{
"name": "animate",
"children": [
{"name": "Easing", "size": 17010},
{"name": "FunctionSequence", "size": 5842},
{
"name": "interpolate",
"children": [
{"name": "ArrayInterpolator", "size": 1983},
{"name": "RectangleInterpolator", "size": 2042}
]
},
{"name": "ISchedulable", "size": 1041},
{"name": "Tween", "size": 6006}
]
}
]
}
如何使用 C# 生成这样的 JSON,我发现了如何制作 JSON 数组,但这就是我所拥有的。我不知道如何制作children":
属性,或者我不知道如何制作由其他 JSON 对象或其他 JSON 数组组成的 JSON 对象。你能给我一点动力,让我可以生成这样一个 JSON 对象吗?谢谢。
如果你使用Json.Net
(你应该使用),你可以创建一个这样的类:
public class MyObject
{
public string Name { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public List<MyObject> Children { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public int? Size { get; set; }
}
然后,如果你创建你的对象是这样(我没有做这件事,只是几级-显然你不具有填充,一次就全部):
var root = new MyObject()
{
Name = "flare",
Children = new List<MyObject>()
{
new MyObject()
{
Name = "analytics",
Children = new List<MyObject>()
{
new MyObject()
{
Name = "cluster",
Children = new List<MyObject>()
{
new MyObject() { Name = "AgglomerativeCluster", Size = 3938 }
}
}
}
}
}
};
然后:
var json = JsonConvert.SerializeObject(root, new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
}));
这会给你(为了可读性,事后格式化):
{
"name": "flare",
"children": [{
"name": "analytics",
"children": [{
"name": "cluster",
"children": [{
"name": "AgglomerativeCluster",
"size": 3938
}]
}]
}]
}
一些注意事项:
NullValueHandling = NullValueHandling.Ignore
允许您禁止包含值为 null 的属性。如果你不关心Name = "flare"
有一个的对象size: null
,那么你就不用担心它。但是如果你这样做了,使用它可以节省至少三个不同的对象,这些对象基本相同但缺少一些属性。
CamelCasePropertyNamesContractResolver
将自动使用驼峰式大小写您的属性名称。您可以将属性设置MyObject
为驼峰式,但这不是 .NET 标准。如果您可以打破该约定,那么您就不需要它。另一种选择是PropertyName
在JsonPropertyAttribute
for each .NET 属性中进行设置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句