2014-10-03 28 views
2

我似乎无法在查询它并接收结果后访问自定义对象数组(即分析表中的列)。Unity3D:如何访问来自ParseObject子类的列表<T>元素

我有一个简单的自定义类调用“TextEntry”包含2个字符串。

public class TextEntry 
{ 
    public string key; 
    public string text; 

    public TextEntry() { } 
} 

我有一个名为“LocalePO”的ParseObject子类,除了其他本机类型,还有一个IList成员。

[ParseClassName("LocalePO")] 
public class LocalePO : ParseObject 
{ 
    [ParseFieldName("version")] 
    public int version 
    { 
     get { return GetProperty<int>("version"); } 
     set { SetProperty<int>(value, "version"); } 
    } 

    [ParseFieldName("code")] 
    public string code 
    { 
     get { return GetProperty<string>("code"); } 
     set { SetProperty<string>(value, "code"); } 
    } 

    [ParseFieldName("name")] 
    public string name 
    { 
     get { return GetProperty<string>("name"); } 
     set { SetProperty<string>(value, "name"); } 
    } 

    [ParseFieldName("keypair")] 
    public IList<object> keypair 
    { 
     get { return GetProperty<IList<object>>("keypair"); } 
     set { SetProperty<IList<object>>(value, "keypair"); } 
    } 


    public LocalePO() { } 
} 

我可以查询解析,并成功返回LocalePO对象,但我不能访问“密钥对”清单的具体“文本输入”成员之后。

 var cloudQuery = new ParseQuery<LocalePO>(); 
     var queryTask = cloudQuery.FirstAsync(); 

     // wait for query to return 
     while (!queryTask.IsCompleted) yield return null; 

     LocalePO locale = queryTask.Result; 

     int CloudVersion = locale.version; // this works 

     List<TextEntry> list = new List<TextEntry>(); 

     list = locale.keypair.Cast<TextEntry>.ToList(); // this doesn't work 

     foreach (var item in locale.keypair)    
     { 

      var entry = item as TextEntry; // this does not work 

      TextEntry entry = (TextEntry)item; // this doesn't work either 

      // this is my current solution which works but seems terrible 
      string json = JsonConvert.SerializeObject(item); 
      TextEntry entry = JsonConvert.DeserializeObject<TextEntry>(json); 


      list.Add(entry); 
     } 

我觉得我在这里俯瞰很简单的东西,但我只是想从我拉解析本地对象,所以我可以在整个应用程序逻辑中使用的数据的数据转换。

在我看来,Parse喜欢类型为“object”的IList与ParseFieldName类型为“TextEntry”类型的IList。例如,如果我有下列情况,解析总是返回null:

[ParseFieldName("keypair")] 
public IList<TextEntry> keypair 
{ 
    get { return GetProperty<IList<TextEntry>>("keypair"); } 
    set { SetProperty<IList<TextEntry>>(value, "keypair"); } 
} 

也许我应该从ParseObject派生TextEntry?我很困惑。

任何帮助,将不胜感激。

谢谢!

回答

0

试试这个:

var cloudQuery = new ParseQuery<LocalePO>(); 
    cloudQuery .Include("keypair"); 
    var queryTask = cloudQuery.FirstAsync(); 

文本输入将需要的parseObject派生,你需要将其注册为一个子类。

这里是我使用的有2个级别的嵌套ILIST的的parseObject的查询示例子类

ParseObject.RegisterSubclass<ProgramDataParse>(); 
    ParseObject.RegisterSubclass<WorkoutDataParse>(); 
    ParseObject.RegisterSubclass<ExerciseDataParse>(); 

var programQuery = new ParseQuery<ProgramDataParse>() 
     .OrderByDescending("createdAt").Limit(2) 
     .Include("workouts") 
     .Include("workouts.exercises");