将存储为 ParseObject 的记录转换为子类

Converting a record stored as a ParseObject to a subclass

我已将 CSV 文件导入到我的 Parse 应用程序中。我希望能够从 table 作为 ParseObject 的子类类型访问记录。我可以获得 table,并且我可以使用例如从记录中获取值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 提供了一种本地方式来在事后进行绑定。

我假设这里没有实际的对象继承关系,否则进行转换就可以了。

我可以想到三个选项(如果我对没有继承的看法是对的)。

  1. 将属性复制到具有额外属性的类型,使用 自动映射器
  2. 将基础对象传递到实现类型的构造函数中 附加属性
  3. 为您拥有的类型构建扩展方法

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

}

希望我更接近你的问题:)

嗯。看来我使这件事比实际情况要复杂得多。 (这就是将 DB naif 在 DB 上松散的结果。:})

我误以为我的查​​询返回的是一个装有 collection 的容器,而不是 collection 本身。当我查询 MyRecord 时,我得到一个实际上属于 MyRecord 类型的 collection,这正是我最初想要的。

感谢您提供的帮助!