2016-01-20 80 views
0

我已经定义了一个名为LeaderboardScore的ParseObject子类,它是从我的云代码函数返回的IDictionary<string, object>如何将IDictionary <object,string>转换为Unity中的ParseObject?

我希望我可以做这样的事情在下面的例子中,但转换失败:(

失败的尝试投:

ParseCloud.CallFunctionAsync<IDictionary<string, object>>("getScore", parameters).ContinueWith(t => 
{ 
    LeaderboardScore score = t.result as LeaderboardScore; 
    Debug.Log(score.get<string>("facebookId")); 
} 

LeaderboardScore定义:

[ParseClassName("LeaderboardScore")] 
public class LeaderboardScore : ParseObject 
{ 
    [ParseFieldName("facebookId")] 
    public string FacebookId 
    { 
     get { return GetProperty<string>("FacebookId"); } 
     set { SetProperty<string>(value, "FacebookId"); } 
    } 

    [ParseFieldName("score")] 
    public int Score 
    { 
     get { return GetProperty<int>("Score"); } 
     set { SetProperty<int>(value, "Score"); } 
    } 
} 

请注意,t.Result确实有正确的信息,meani我可以通过调用诸如t.Result["facebookId"] as string之类的东西来访问它,但是能够传递LeaderboardScore对象而不是IDictionary<string, object>会更好。

如果有人可以在这个问题上发表看法,我将不胜感激! :)

回答

0

正确的方法做,这是每一个你有兴趣,然后让你的云ParseObjects创造native subclasses函数返回该类型或该类型的列表,如下所示:

ParseCloud.CallFunctionAsync<LeaderboardScore>("getScore", parameters).ContinueWith(t => 
{ 
    LeaderboardScore score = t.Result; 
} 

解析负责转换,因此您不必担心它。要返回列表,只需使用IList<LeaderboardScore>

1

你可以施放所有字典为对象(财产)由:

public static T ToObject<T>(this IDictionary<string, object> source) 
    where T : class, new() 
{ 
    T someObject = new T(); 
    Type someObjectType = someObject.GetType(); 

    foreach (KeyValuePair<string, object> item in source) 
    { 
     someObjectType.GetProperty(item.Key).SetValue(someObject, item.Value, null); 
    } 

    return someObject; 
} 
+0

嘿,这是一个很酷的实用功能,但遗憾的是它并没有真正与ParseObjects工作:( 我试图修改它一点点地得到它的工作,但我没有运气: http://pastebin.com/SvVgdVvL 它告诉我“NullReferenceException:对象引用未设置为对象的实例”在someObjectType.GetProperty(item.Key).SetValue(someObject,item .Value,null);'line。 我觉得必须有一个更简单的方法来解决这个问题,因为它是一个很常见的操作,但我找不到任何例子或者在文档中提到它 –

+0

尝试使用: 'var property = someObjectType.GetProperty(item.Key);如果(property!= null) {0} }' –

+0

如果您的字典有“facebookId”,您必须在类 –

相关问题