C# 将存储为ParseObject的记录转换为子类
我已将CSV文件导入我的解析应用程序。我希望能够将表中的记录作为ParseObject的子类类型进行访问。我可以获取表格,并且可以使用myRecord.get(“MyField”)从记录中获取值。我更喜欢通过子类上的属性获取字段 FWIW,我的客户端是Unity桌面应用程序 为了说明我的目标:C# 将存储为ParseObject的记录转换为子类,c#,csv,subclassing,C#,Csv,Subclassing,我已将CSV文件导入我的解析应用程序。我希望能够将表中的记录作为ParseObject的子类类型进行访问。我可以获取表格,并且可以使用myRecord.get(“MyField”)从记录中获取值。我更喜欢通过子类上的属性获取字段 FWIW,我的客户端是Unity桌面应用程序 为了说明我的目标: [ParseClassName( "MyRecord" )] public class MyRecord: ParseObject { [ParseFieldName( "MyField" )]
[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?
} );
}
[ParseClassName(“MyRecord”)]
公共类MyRecord:ParseObject
{
[ParseFieldName(“MyField”)]
公共字符串MyField
{
获取{return GetProperty(“MyField”);}
集合{SetProperty(值,“MyField”);}
}
//....
}
//其他地方。。。
void示例()
{
var query=new ParseQuery();
query.FindAsync().ContinueWith(t=>
{
var anObj=t.Result.First();//anObj是ParseObject类型
var a=anObj.Get(“MyField”);//工作正常
//不知怎的把anObj改写成了MyRecord
var b=myRecord.MyField;//我该怎么做?
} );
}
这可能吗
[编辑]
关于铸造anObj的想法:铸造将失败,因为anObj实际上不是MyRecord类型
我对问题根源的理解是,在我将CVS文件导入Parse时,Parse不知道行可以映射到MyRecord,因此它将行创建为普通的ParseObject实例,并将列内置到其字典中。我认为Parse子类化的核心是一种将属性包装为字典访问器的技术。我希望(虽然不是真的期望)解析提供了一种在事后进行绑定的本机方法。我认为这里没有实际的对象继承关系,否则执行强制转换就可以了 我可以想到三种选择(如果我对没有继承的看法是正确的话)
var myRecord = AutoMapper.Map<MyRecord, ParseObject>(anObj);
// Then access properties on myRecord like you wanted, so myRecord.MyField
(三)
创建一个名为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" );
}
}
公共静态类MyRecordExtensions
{
公共静态字符串GetMyField(此ParseObject ParseObject)
{
返回GetProperty(“MyField”);
}
//不确定你是否需要二传手,只是以防万一
公共静态void SetMyField(此ParseObject ParseObject,字符串newValue)
{
SetProperty(新值,“MyField”);
}
}
希望我更接近你的问题所在:)好吧。看来我把事情弄得比实际情况复杂得多。(这就是在DB上松开DB naif的结果。:}) 我的错误印象是,我的查询返回的是一个装有我收藏的容器,而不是收藏本身。当我查询MyRecord时,我得到了一个实际上是MyRecord类型的集合,这就是我最初想要的
谢谢你提供的帮助 如果您将其转换为MyRecord,是否会出现错误?例如:MyRecord rec=(MyRecord)anObj如果是,您可以编辑您的问题以添加您得到的错误吗?是的,这很接近,谢谢。:)我已经详细阐述了这个问题。理想情况下,我能够让Parse在导入时绑定行,这样它就可以创建一个MyRecord表而不是ParseObject。其次是Parse知道如何在事后重新绑定。实际上,我正在按照你的#2战略做一些事情#1看起来更优雅。我以前不熟悉AutoMapper,所以也非常感谢。
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" );
}
}