在查询并接收结果后,我似乎无法访问自定义对象数组(即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对象,但我无法访问特定的&#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?我很困惑。
任何帮助都将不胜感激。
谢谢!
答案 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");