我在思考如何正确序列化嵌套对象时遇到了麻烦。例如,假设我有下面的类,它描述了一个我想要序列化的对象。
public class MyObject
{
[JsonProperty(PropertyName = "type")]
public string Type { get; set; }
[JsonProperty(PropertyName = "data")]
public string Data { get; set; }
[JsonConstructor]
public MyObject()
{
}
public MyObject(object obj)
{
Data = JsonConvert.SerializeObject(obj);
Type = obj.GetType().FullName;
}
}
在我的代码中,如果我想创建这个对象的一个新示例,我可以这样做:
static MyObject GetMyObject<T>(object goo)
{
var v = (T)goo;
MyObject obj = new MyObject();
obj.Type = goo.GetType().FullName;
obj.Data = JsonConvert.SerializeObject(v);
return obj;
}
如果我只有一个对象,这一切都很好,但是我还需要序列化一个MyObject的列表,所以,我得到了这样的东西。
static MyObject GetMyObjectGroup(MyObjectGroup group)
{
List<MyObject> children = new List<MyObject>();
//Loop through the list of objects and serialize them
foreach (var obj in group.Objects)
{
if (obj == null)
continue;
if (obj.GetType() == typeof(MyObjectGroup))
return GetMyObjectGroup(obj as MyObjectGroup);
MyObject child = new MyObject();
child.Type = obj.GetType().FullName;
child.Data = JsonConvert.SerializeObject(obj, GeometryResolver.Settings);
children.Add(child);
}
//Now create a parent obj and set the data to the list of serialized children
MyObject parent = new MyObject();
parent.Type = group.GetType().FullName;
parent.Data = JsonConvert.SerializeObject(children);
return parent;
}
然而,当我尝试调用GetMyObjectGroup
方法并查看结果时,json对象看起来并不正确,它似乎在序列化的子对象列表中到处都放置了大量的\"
字符,例如,我的Json如下所示:
{
"type": "MyObjectGroup",
"data": "[{\"type\":\"SomeType\",\"data\":\"{\\\"version\\\":1000}},{\"type\":\"SomeType\",\"data\":\"{\\\"version\\\":2000}}]
}
当我认为它应该是这样阅读的时候:
{
"type": "MyObjectGroup",
"data": [
{
"type": "SomeType",
"data": "{\"version\":1000}"
},
{
"type": "SomeType",
"data": "{\"version\":2000}"
}
]
}
1条答案
按热度按时间6ljaweal1#
我测试了你的代码,一切正常,你只有一个bug,如果你想让你的方法递归,你必须把
var children = new List<MyObject>()
和父代码移到GetMyObjectGroup方法之外。你可以让你的代码更简单
可以使用以下代码测试结果