【问题标题】:How to send generics over UDP connection C#?如何通过 UDP 连接 C# 发送泛型?
【发布时间】:2012-11-14 20:35:00
【问题描述】:

我想知道有没有办法发送某种泛型,例如需要将List <float> floatValues = new List<float>() 发送到 udp 客户端。我不知道该怎么做,任何帮助将不胜感激!

【问题讨论】:

    标签: c# udp byte converter send


    【解决方案1】:

    您可以使用一些序列化工具(如XmlSerializerBinaryFormatterDataContractSerializer)序列化floatValues,然后将其反序列化。

    或者您可以创建自己的“应用程序级协议”并放入流类型名称和序列化器类型,并在反序列化过程中使用此信息。

    【讨论】:

    • 实际上我必须将泛型翻译为小端然后发送它们,在此之前我需要对列表做一些事情。
    • 您可以序列化整个列表并发送。我认为当你有不同的平台时,小端和大端是有意义的:例如,使用 .NET 进行序列化和使用 C++ 进行反序列化。
    • @TimTaker:你需要什么样的例子?网络上有很多关于任何类型的序列化程序的示例。你到底需要什么?
    【解决方案2】:

    你想做的事情被称为serialization/deserialization

    在计算机科学中,在数据存储和传输的上下文中,序列化是将数据结构或对象状态转换为可以存储的格式(例如,在文件或内存缓冲区中,或跨域传输)的过程网络连接链接)并在稍后在相同或另一个计算机环境中“复活”

    我建议您使用现有的库之一,而不是构建您自己的序列化程序 XmlSerializer, SoapFormatter, BinaryFormatter, DataContractSerializer , DataContractJsonSerializer, JavaScriptSerializer, Json.Net, ServiceStack, Protobuf.Net ........

    这里是一个使用 Json 序列化的例子

    //Sender
    string jsonString = new JavaScriptSerializer().Serialize(floatValues);
    byte[] bytesToSend = Encoding.UTF8.GetBytes(jsonString);
    
    //Receiver
    string receivedJson = Encoding.UTF8.GetString(bytesToSend);
    List<float> floatValues2 = new JavaScriptSerializer()
                                             .Deserialize<List<float>>(receivedJson);
    

    【讨论】:

      猜你喜欢
      • 2010-12-30
      • 2021-07-06
      • 2017-09-27
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 2014-09-03
      • 2021-10-30
      • 2015-08-31
      相关资源
      最近更新 更多