【问题标题】:Unity serialize some part of class to jsonUnity将类的某些部分序列化为json
【发布时间】:2020-04-08 13:55:43
【问题描述】:

我想将课程的一部分发送到服务器。

发送信息

[Serializable]
public class SendingInfos
{
    public string tempID;
    public string playerLettersInHand;
    public string playerLettersMiddle;
    public int playerBet;
    public string playerLetterSent;

}

当前 temID 和 playerBet 有值,而其余为 null。在这种情况下,如果我使用

        string jsondata = JsonUtility.ToJson(sendingInfos);

这个然后发送。我是发送不是空的部分还是全部? 有没有其他选项可以发送一部分?喜欢

        string jsondata = JsonUtility.ToJson({ sendingInfos.tempID, sendingInfos.playerBet  });

编辑:我想将类的某些部分发送到服务器的原因是,将服务器网络流量保持在尽可能低的水平。另外,我可以通过将班级划分为 2 个班级来做到这一点。但是,如果有更简单的方法,我想这样做。

【问题讨论】:

  • 您可以创建另一个类,如SendingInfosEntity,只使用原始类的部分属性。在这种情况下,您必须手动或使用某种automapper 来回复制SendingInfosEntity 类的所有属性。

标签: c# json unity3d json-serialization


【解决方案1】:

这种情况下的正常操作只是序列化整个对象。这样你就可以确保它可以在没有额外设置的情况下被反序列化。 NULL 应该自动处理 AFAIK,因此当再次序列化时,您应该返回相同的对象(所有值都设置为 NULL 或实际值)

您通常不会只发送一个对象的一半,因为您在发送者和接收者之间为整个对象维护了合同,而不是一半或三分之一。这似乎有点奇怪,我不明白你为什么想要这个。

【讨论】:

  • 因为我想向服务器发送更少的数据,这样服务器上的网络流量就会减少。这就是为什么,我不想发送为空的变量
  • 真的吗?你是如何发送数据的?你真的测量过你真的需要这种优化吗?如果您确实这样做并且您已经根据您的要求测量了您的性能,那么您可以序列化一个字典(键/值)而不是序列化一个反序列化对象,如果它们为空,则省略键。不过,这将需要更多的编码。
  • 请记住,您现在提出的这种“优化”在大多数情况下的增益都非常低,除非您正在创建诸如低功耗网络之类的东西(在这种情况下,json 是根本不是发送任何数据的正确工具)。如果您想通过线路发送更少的数据,请查看 messagepack:msgpack.org
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-15
  • 1970-01-01
相关资源
最近更新 更多