Unity3D:如何从ParseObject子类</t>访问List <t>元素

时间:2014-10-03 14:42:50

标签: json unity3d parse-platform ilist

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

我有一个简单的自定义类调用&#34; TextEntry&#34;包含2个字符串。

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

    public TextEntry() { }
}

我有一个名为&#34; LocalePO&#34;的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对象,但我无法访问特定的&#34; TextEntry&#34; &#34; keypair&#34;的成员之后列出。

        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拉到的数据转换为本地对象,这样我就可以在整个app逻辑中使用数据。

在我看来,Parse更喜欢IList类型&#34; object&#34; vs一个类型为&#34; TextEntry&#34;的IList。输入ParseFieldName的类型。例如,如果我有以下内容,Parse总是为该字段返回null:

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

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

任何帮助都将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:0)

试试这个:

    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");