我在 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)无法以它可以解析的格式检索列表,或者我不确定。