unity Restsharp Api Json 序列化和反序列化
Posted
技术标签:
【中文标题】unity Restsharp Api Json 序列化和反序列化【英文标题】:Unity Restsharp Api Json Serialization & Deserialization 【发布时间】:2022-01-20 06:07:19 【问题描述】:我正在开发一款多人游戏。我有一个朋友在 Swagger.io 上开发 API。所以这是我的问题:
我想使用我可以使用的 Task 函数,而不是 Unity 自己的 UnityWebRequest 函数。 我看了一下,做了一些研究,写了如下代码。
private async Task<T> Send<T>(string service, object obj)
RestClient client = new RestClient(baseUrl);
RestRequest request = new RestRequest(service)
RequestFormat = DataFormat.Json,
Method = Method.POST,
;
#if UNITY_android
uniqueID = SystemInfo.deviceUniqueIdentifier;
platform = "1";
#endif
#if UNITY_ios
uniqueID = UIDevice.identifierForVendor
platform = "0";
#endif
request.AddHeader("DeviceID", uniqueID);
request.AddHeader("BundleID", Application.identifier);
request.AddHeader("BuildID", "0");
request.AddHeader("Platform", platform);
request.AddHeader("Version", "0");
request.AddJsonBody(obj);
var response = await client.ExecuteAsync(request);
if (response.Content != null && response.StatusCode == HttpStatusCode.OK)
var jsonSerializerSetting = new JsonSerializerSettings NullValueHandling = NullValueHandling.Ignore, MissingMemberHandling = MissingMemberHandling.Ignore ;
var result = JsonConvert.DeserializeObject<T>(response.Content, jsonSerializerSetting);
return result;
else
return default;
因为它是一个异步函数,所以我用 await 调用它没有任何问题。像这样:
我有一些课程可以响应其他课程:
[Serializable]
public class WelcomeRequest : Response
public string Location;
public string Language;
[Serializable]
public class WelcomeRequest : Response
public string Location;
public string Language;
[Serializable]
public class WelcomeResponse : Response
public WelcomePayload Payload;
[Serializable]
public class WelcomePayload : Response
public Player Player;
public Settings Settings;
public Season Play;
public Season Purchase;
public Game GameOfSeason;
public Game[] Games;
public double PrizePool;
(我知道这是一个大项目,子类很多。我不想让你为我写代码,我只是想让你解释一下我写的代码的逻辑和一个我可以参考的例子. 更别说我一个人在努力了。除了你我没有任何朋友可以帮助你。) 我能够从服务器接收 json 格式的文件。但是由于这个函数只返回对象,我不能分配类的子对象。我是否需要再次将其转换为 json 格式并反序列化?由于我之前使用的是 Firebase 基础架构,因此我能够毫无问题地进行通信。我查找了 Restsharp Unity 教程,但没有找到。你能帮助我吗?至少如果你指导我,我会尝试自己解决它。如果我没有正确表达自己,我很抱歉,因为这是我在这个网站上的第一篇文章,我不太了解规则。 无尽的感谢你们。
【问题讨论】:
我不明白你的问题...But since this function only returns the object, I cannot assign sub-objects of the class.
.. 为什么不呢?如果这返回让我们说一个WelcomeResponse
是什么阻碍你访问例如Payload.Player
等等...?
我可以从服务器获取数据。例如 Language = ENG,LanguageCode = 0,LanguageFlag = ENGFLAG 等。我可以获取数据,但是当我尝试从例如 Localization 类设置默认语言(包括上述信息,如 LanguageCode )时,我无法解析 json 文件。由于我将其保留为数组,因此我将该问题列为数组并解决了它。
【参考方案1】:
这并不能真正回答您的问题,但您可能需要考虑使用生成的客户端。
如果 API 是用 swagger 制作的,您应该能够使用 openapi-generator 和 Swagger Schema 制作 C# API 客户端。然后只需构建生成的项目并将 DLL 放入统一项目的 Assets 文件夹中。
您可能还需要包含RestSharp 和Newtonsoft.Json。只需下载这些 NuGet 包并解压缩它们(nupkg 文件只是 zip),dll 应该在其中。通过将 DLL 放到 Assets 文件夹中来包含它。
【讨论】:
正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。 我想我很难过,因为我不知道如何创建招摇方案。我的项目中已经存在 RestSharp 和 Newtonsoft.Json dll。我拉数据没有任何问题,但是我无法从服务器同步类中的值,因为我没有根据架构拉数据。我现在脑子里灯火通明。感谢您的快捷方式。我会尝试测试它并(希望)积极地与代码分享结果。以上是关于unity Restsharp Api Json 序列化和反序列化的主要内容,如果未能解决你的问题,请参考以下文章
通过 RestSharp C# 将 JSON 数组发布到 PHP API