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

时间:2015-12-11 01:59:21

标签: c# csv subclassing

我已将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提供了一种本地方式来进行绑定。

2 个答案:

答案 0 :(得分:0)

我认为这里没有实际的对象继承关系,否则执行转换会起作用。

我可以想到三个选项(如果我没有继承,那就是正确的。)

  1. 将属性复制到具有额外属性的类型 AutoMapper
  2. 将基础对象传递给实现类型的构造函数 附加属性
  3. 将扩展方法构建为您拥有的类型
  4. 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类型的集合,这是我在第一时间所追求的。

感谢您提供的帮助!