我在 C# 中有一个名为 MyObject 的对象,我一直在尝试制作它,以便我们可以获取该对象,将其序列化为 JSON,使用该 JSON 填充 JavaScript 中的其他列表等,然后使用生成的更改后的 JSON 字符串反馈到 MyObject 对象并更改其值。但是,每当我在此对象上调用 Json() 时,它都会为我提供正确序列化的 JSON,但是当我将确切的 JSON 反馈回 UpdateFromJson(string json) 方法时,它声称 List 的 count=0 并且我没有新对象中的我的列表对象。其他属性填充得很好;唯一的问题是列表。
这是没有属性但具有相关方法和对象列表的(简化的)类。应该注意的是,列表包含我在命名空间中其他地方定义的对象,即它们不在 C# 框架中的任何地方,它们是自定义的。
[Serializable]
public class MyObject
{
public MyObject()
{
this.Elements = new List<MyObjectElement>();
}
public List<MyObjectElement> Elements { get; private set; }
public string Json()
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Serialize(this);
}
public void UpdateFromJson(string json)
{
System.Web.Script.Serialization.JavaScriptSerializer serializer = new JavaScriptSerializer();
MyObject temp = serializer.Deserialize<MyObject>(json);
foreach (PropertyInfo property in temp.GetType().GetProperties())
{
object value = property.GetValue(temp, null);
if (value != null)
{
if (value.GetType() == typeof (List<MyObjectElement>))
{
foreach(MyObjectElement le in (List<MyObjectElement>)value)
{
this.Elements.Add(le);
}
}
}
property.SetValue(this, value, null);
}
}
}
就像我说的那样,我遇到的唯一问题是,例如,当serializer.Deserialize<MyObject>(json)
发生时,列表中没有任何内容,而实际上,实际的 JSON 字符串(我已经将它打印到浏览器并在 JSONLint 中对其进行了测试)包含元素的数据。似乎Deserialize(json)
无法以它可以解析的格式检索列表,或者我不确定。