使用Unity

时间:2017-05-18 09:01:06

标签: c# json list unity3d reflection

我有一个非常复杂的情况,我想要一些建议来解决这种情况。所以我之前问了这个问题:Unity save everything (snapshot)

我正在尝试将所有内容序列化为JSON。虽然序列化一切我有一些要求。

  1. 我不知道哪些组件附加到游戏对象上。
  2. 我不知道这些组件(类)对属性/字段有什么用处。
  3. 我成功地序列化了基本的统一类型(transform / meshrenderer等)。但是我现在正在编写代码来序列化自定义组件。为此,我使用反射。如果类只有主类型(string,int,float等),则此代码有效。但是我仍面临两个挑战。

    1. 在不知道类型的情况下序列化列表(或者至少知道类型但不能用我的知识动态地转换它)
    2. 序列化包含自定义类的字段(以及包含自定义类的列表)。
    3. 目前我想主要就第一点提出建议。我开发了这段代码: Type是我之前获得的字符串

      if (type.Contains("List"))
      {
          value = serializeListVariable(singular.GetValue(comp));
      }
      

      然后这是应该序列化列表的方法。通过调试,我可以看到对象在values变量中。但是,它们不会转换为JSON,只返回{}。在第一次迭代中,我想动态保存主要类型的列表。但是后来我想用自定义类来做这件事。如果我使用getvalues进行tostring,我之后可以获得正确的JSON字符串,但是我再次对这些自定义类的tostring方法没有影响......

      private string serializeListVariable(object listobject)
      {
          PropertyInfo listitems = listobject.GetType().GetProperty("Item");
          int listcount = (int)listobject.GetType().GetProperty("Count").GetValue(listobject, null);
          var values =  new object[listcount];
          for (int i =0; i < listcount; i++) {
      
              values[i] = listitems.GetValue(listobject, new object[] { i });
          }
          string serializedlist = JsonHelper.ToJson(values);
          return serializedlist;
      }
      

      调用的JSON帮助器方法:

      public static string ToJson<T>(T[] array)
      {
          Wrapper<T> wrapper = new Wrapper<T>();
          wrapper.Items = array;
          return JsonUtility.ToJson(wrapper);
      }
      

      提到的包装类:

      [Serializable]
      private class Wrapper<T>
      {
          public T[] Items;
      }
      

      希望你们中的一些人知道解决这个问题。

      提前致谢!

1 个答案:

答案 0 :(得分:0)

在Unity中使用LitJSON插件。

return JsonMapper.ToJson(anyClassOrList);
相关问题