我想将List<some_object>
转换为JSON。
public class some_object
{
public string field1 {get; set;}
public string field2 {get; set;}
}
我想序列化这个:
var somejson = new {
some_objects = new List<some_object>() {...some items...};
}
标准序列化产生一个数组:
{
"some_objects": [
{
"field1":"value1",
"field2":"value2"
},
{
"field1":"value3",
"field2":"value4"
}
]
}
相反,我希望生成这样的东西(更像XML):
{
"some_objects":
{
"some_object": {"field1":"value1", "field2":"value2"},
"some_object": {"field1":"value3", "field2":"value4"}
}
}
有没有办法产生这个结果?
答案 0 :(得分:2)
对象的所有属性都需要不同。从概念上讲,XML表示一个对象,但标签不直接链接到属性的概念。 JSON的方法是你发布的:
{
"some_objects": [
{"field1":"value1", "field2":"value2"},
{"field1":"value3", "field2":"value4"}
]
}
如果您想为每个项目指定一个可用于访问它们的名称,您可以使用字典:
var dict = new {
some_objects = new Dictionary<string,some_object>(){
{ "a" , new some_object { field1="value1",field2="value2" } },
{ "b" , new some_object { field1="value3",field2="value4" } },
}
}
这将序列化为:
{
"some_objects":
{
"a": {"field1":"value1", "field2":"value2"},
"b": {"field1":"value3", "field2":"value4"}
}
}
答案 1 :(得分:0)
不,因为您将获得具有相同名称的对象,名为:some_object
想想......如果你能做到,你将如何引用其中一个,使用some_objects.some_object
你怎么知道它是什么?
答案 2 :(得分:0)
您似乎想要存储某种元数据,特别是对象的类型,使用XML可以使用属性。您必须执行类似添加单独属性的操作:
public class some_object
{
public string typeText { get { return GetType().ToString(); } }
public string field1 { get; set; }
public string field2 { get; set; }
}
理论上会产生类似于:
的JSON{
"some_objects": [
{
"typeText":"MyNamespace.some_object",
"field1":"value1",
"field2":"value2"
},
{
"typeText":"MyNamespace.some_object",
"field1":"value3",
"field2":"value4"
}
]
}
根据您的需要,您可能希望将此元数据封装到自己的类中。