如何从Unity内的GameSparks中检索属性

时间:2016-01-30 23:00:58

标签: c# dictionary properties

我疯了......我错过了一些东西,我看不出来的东西?!?!

我创建了一个名为" GAME_SETTINGS"在gameSparks管理区域内并将其包含在其中:

{
    "AppVersionIOS": 1,
    "AppVersionAndroid": 1
}

然后我尝试在Unity内部检索它:

new GameSparks.Api.Requests.GetPropertyRequest().SetPropertyShortCode("GAME_SETTINGS").Send((response) => {
    if (!response.HasErrors) {
        Debug.Log("Setting Achieved: "+response.JSONString);
    } else {
        Debug.Log("Error Getting Settings");
    }
});

我可以看到我在Debug.Log中获取设置:

Setting Achieved: {"@class":".GetPropertyResponse","property":{"AppVersionIOS":1,"AppVersionAndroid":1},"requestId":"XXXXXXXXXXXXXXX","scriptData":null}

我的问题是...如何在字典中获取属性AppVersionIOS和AppVersionAndroid,以便我可以从其他脚本调用它们...

真的希望在这件事上提供帮助,并提前感谢: - )

2 个答案:

答案 0 :(得分:2)

我实际上为GameSparks工作,并注意到你的问题,所以建立一个帐户来回答你。 JSON中返回的属性值具有可空类型:https://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx

最佳做法是在将值缓存到Dictionary或其他方式之前解析这些值。

以下代码应该允许您获取这些属性,然后您可以根据需要将它们存储在字典中。

 public void GetProperties()
{
    new GameSparks.Api.Requests.GetPropertyRequest()
        .SetPropertyShortCode("GAME_SETTINGS")
        .Send((response) =>
        {
            if (!response.HasErrors)
            {
                print(response.JSONString);
                int androidProperty = (int)response.Property.GetInt("AppVersionAndroid");
                int IOSProperty = (int)response.Property.GetInt("AppVersionIOS");
                print("AndroidProperty:" + androidProperty);
                print("IOSProperty:" + IOSProperty);
            }
            else
            {
                Debug.LogWarning(response.JSONString);
            }

        });
}

希望这可以解决您的问题。如果您有任何其他问题,请随时访问我们的网站并与我们联系。 此致,帕特里克。

答案 1 :(得分:0)

注意:这个答案假定API没有办法将其转换为一个可以轻松操作/解析的好对象,因此它会使用某个类将其自身转换。但是,您的API很可能在某处提供了这样的功能,因此您最好再次查看文档。我猜它在https://api.gamesparks.net/#getpropertyrequest附近。

您已经拥有JSON文档,您所要做的就是解析它。在JavaScript文件中比在C#中更容易,但您也可以在那里使用JsonUtils类,请参阅http://docs.unity3d.com/Manual/JSONSerialization.html。让http://json2csharp.com/将JSON转换为类布局,然后你得到

public class Property
{
    public int AppVersionIOS { get; set; }
    public int AppVersionAndroid { get; set; }
}

public class RootObject
{
    public string __invalid_name__@class { get; set; }
    public Property property { get; set; }
    public string requestId { get; set; }
    public object scriptData { get; set; }
}

现在只需取出字符串并将其序列化为RootObject

new GameSparks.Api.Requests.GetPropertyRequest().SetPropertyShortCode("GAME_SETTINGS").Send((response) => {
    if (!response.HasErrors) {
        Debug.Log("Setting Achieved: "+response.JSONString);
        //Serialization
        var info = JsonUtility.FromJson<RootObject>(response.JSONString);

        //Print the AppVersionIOS property
        Debug.Log("App Version iOS: " + info.Property.AppVersionIOS);
    } else {
        Debug.Log("Error Getting Settings");
    }
});

您可能需要在类的数据类型中使用某些mofication(例如,如果其中可能存在实际字符串,则将object scriptData设为string scriptData),但应该是它。玩得开心。