我已将CSV文件导入我的Parse应用程序。我希望能够从表中访问作为ParseObject子类型的记录。我可以获得该表,并且我可以使用例如记录获取值myRecord.Get( “MyField的”)。我希望通过我的子类上的属性来获取字段。
FWIW,我的客户端是Unity桌面应用程序。
说明我的目标:
[ParseClassName( "MyRecord" )]
public class MyRecord: ParseObject
{
[ParseFieldName( "MyField" )]
public string MyField
{
get { return GetProperty<string>( "MyField" ); }
set { SetProperty<string>( value, "MyField" ); }
}
//....
}
// elsewhere...
void Example()
{
var query = new ParseQuery<MyTable>();
query.FindAsync().ContinueWith( t =>
{
var anObj = t.Result.First(); // anObj is type ParseObject
var a = anObj.Get<string>( "MyField" ); // works fine
// somehow recast anObj to a MyRecord
var b = myRecord.MyField; // How do I get to this?
} );
}
这可能吗?
[编辑]
关于强制转换anObj的想法:转换将失败,因为anObj实际上不是MyRecord类型。
我对问题根源的理解是,当我将CVS文件导入Parse时,Parse没有关于行可以映射到MyRecord的概念,所以它创建了行作为普通的ParseObject实例,其中内置了列字典。我认为Parse子类化的核心是将属性作为访问者包装到字典中的技术。我希望(虽然不是真的期待)Parse提供了一种本地方式来进行绑定。
答案 0 :(得分:0)
我认为这里没有实际的对象继承关系,否则执行转换会起作用。
我可以想到三个选项(如果我没有继承,那就是正确的。)
1) 基本上就是这样创造:
var myRecord = AutoMapper.Map<MyRecord, ParseObject>(anObj);
// Then access properties on myRecord like you wanted, so myRecord.MyField
2)
var myRecord = new MyRecord(anObj);
// Then access properties on myRecord like you wanted, so myRecord.MyField, but you will need to copy all pertinent values yourself in the constructor
3) 创建一个名为MyRecordExtensions的新类型,如下所示:
public static class MyRecordExtensions
{
public static string GetMyField(this ParseObject parseObject)
{
return GetProperty<string>( "MyField" );
}
// Not sure if you need the setters at all, but just in case
public static void SetMyField(this ParseObject parseObject, string newValue)
{
SetProperty<string>( newValue, "MyField" );
}
}
希望我甚至接近你的问题:)
答案 1 :(得分:0)
好。我觉得这比实际上要复杂得多。 (这就是在数据库中将数据库转换为数据库的问题。:}}
我的错误印象是我的查询返回了一个容纳我的集合的容器,而不是集合本身。当我查询MyRecord时,我得到一个实际上是MyRecord类型的集合,这是我在第一时间所追求的。
感谢您提供的帮助!