.Net Core通过TCP发送/接收JSON

时间:2017-07-19 08:58:14

标签: json tcp .net-core

我想通过TCP发送和接收JSON。 问题:我必须在我的TCP客户端服务器中发送和接收JSON。我怎样才能实现它?

我使用TcpListener和TcpClient进行连接,我有这段代码:

__init__()

我可以做得更好吗?客户端必须接收JSON(我使用Newtonsoft.Json)并且我不知道它是否是好的代码。也许你给我写了一些好的做法?或者也许一些提示。

修改 现在我写了这样的东西:

    NetworkStream stream = client.GetStream();

    var serializer = new JsonSerializer();
    var sr = new StreamReader(stream, new UTF8Encoding(), false);
    var jsonTextReader = new JsonTextReader(sr);
    var data = serializer.Deserialize(jsonTextReader).ToString();

    Console.WriteLine("Received: {0}", data);

    StringBuilder sb = new StringBuilder();
    StringWriter sw = new StringWriter(sb);
    JsonWriter writer = new JsonTextWriter(sw);
    writer.WriteValue('1');
    byte[] buffer = Encoding.ASCII.GetBytes(writer.ToString());
    stream.Write(buffer, 0, buffer.Length);

它并不起作用,因为Java客户端发送的数组如:[{&#34; name&#34; :&#34; logo&#34;,&#34; session&#34; :&#34; i3fnj34njn780&#34;}]那么我该如何解决这个问题呢?我想这样称呼它:public static T DeserializeFromStream<T>(Stream stream) { using (var sr = new StreamReader(stream)) using (var jsonTextReader = new JsonTextReader(sr)) { return new JsonSerializer().Deserialize<T>(jsonTextReader); } } 修剪和替换在这里对我不起作用。

1 个答案:

答案 0 :(得分:2)

byte[] buffer = Encoding.ASCII.GetBytes(writer.ToString());

这是不正确的。每RFC4627

  
      
  1. 编码

         

    JSON文本应以Unicode编码。默认编码为
      UTF-8。

  2.   

发送JSON。

StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
JsonWriter writer = new JsonTextWriter(sw);

这是不必要地编写SB。直接写入网络流:

using (NetworkStream stream = client.GetStream()) {
  using (TextWriter tw = new StreamWriter(stream, Encoding.UTF8)) {
    using (JsonWriter writer = new JsonTextWriter(tw)) {
     ...
    }
  }
}

另外,请使用using

另外,@ CodeCaster说的一切。这应该是一个合适的Web API,而不是一些流氓TCP服务器。不仅存在多个请求类型(即路由)的明显问题,而且您必须考虑代理(none将允许某些任意端口),服务器身份验证(您必须通过HTTPS隧道并验证Android APP中的服务器证书),允许网络缓存,HTTP标头等等。你需要适当的错误状态和错误代码,你的##########################################################一个好的工作是建立一个合适的REST API,并且可能是一个好的数据模型 JSON之上,如JSON-API