我可以自动序列化Dart对象以通过Web Socket发送吗?

osk*_*bor 2 html5 serialization websocket dart

我刚看到有一些用于运行Dart Web服务器的库,比如Start.所以我在考虑这样的事情..如果客户端和服务器代码都是用Dart编写的,是否可以通过websockets(或普通REST)发送"Dart对象",以便类型信息保留在另一端?或者我是否需要通过JSON或类似的方式序列化/反序列化?还是我在这里思考问题?

关于奥斯卡

Set*_*add 7

您需要以某种方式序列化Dart对象.您可以尝试JSON,或者您可以尝试重型序列化包.

自定义Dart类没有完全自动的JSON序列化.您将需要添加自定义toJson序列化程序并创建某种fromJson构造函数.

例如,如果你有一个Person类,你可以这样做:

import 'dart:json' as json;

class Person {
  String name;
  int age;

  Person(this.name, this.age);

  Person.fromJson(String json) {
    Map data = json.parse(json);
    name = data['name'];
    age = data['age'];
  }

  Map toJson() {
    return {'name': name, 'age': age};
  }
}
Run Code Online (Sandbox Code Playgroud)

注意:这fromJson只是一个约定.您需要以某种方式调用它,没有内置机制来获取任意JSON字符串并在您的自定义对象上调用正确的构造函数.

如上所述,序列化包更重,但功能更全面.以下是其文档中的示例:

 // uses the serialization package
 var address = new Address();
 address.street = 'N 34th';
 address.city = 'Seattle';
 var serialization = new Serialization()
     ..addRuleFor(address);
 Map output = serialization.write(address);
Run Code Online (Sandbox Code Playgroud)

 // uses serialization
 var serialization = new Serialization()
   ..addRuleFor(address,
       constructor: "create",
       constructorFields: ["number", "street"],
       fields: ["city"]);
Run Code Online (Sandbox Code Playgroud)