【问题标题】:Unity3D: How to access List<T> elements from ParseObject subclassUnity3D:如何从 ParseObject 子类访问 List<T> 元素
【发布时间】:2014-10-03 14:42:50
【问题描述】:

在查询并接收结果后,我似乎无法访问自定义对象数组(即 Parse 表中的一列)。

我有一个简单的自定义类调用“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() { }
}

我可以查询 Parse 并成功返回一个 LocalePO 对象,但之后我无法访问“keypair”列表的特定“TextEntry”成员。

        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 提取的数据转换为本地对象,以便我可以在整个应用程序逻辑中使用这些数据。

在我看来,Parse 更喜欢 ParseFieldName 类型的 IList,而不是类型为“TextEntry”的 IList。例如,如果我有以下内容,Parse 总是为该字段返回 null:

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

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

任何帮助将不胜感激。

谢谢!

【问题讨论】:

    标签: json unity3d parse-platform ilist


    【解决方案1】:

    试试这个:

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

    TextEntry 需要从 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");
    

    【讨论】:

      猜你喜欢
      • 2020-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多