我剛剛看到有一些運行Dart Web服務器的庫,如Start。 所以我在想這樣的事情.. 如果客戶端和服務器代碼都是用Dart編寫的,是否可以通過websockets(或普通的REST)發送「Dart對象」,以便類型信息保留在另一個上結束?或者我需要通過JSON或類似的方式序列化/反序列化?還是我在這裏思考的東西?我可以自動序列化通過Web套接字發送的Dart對象嗎?
關於奧斯卡
我剛剛看到有一些運行Dart Web服務器的庫,如Start。 所以我在想這樣的事情.. 如果客戶端和服務器代碼都是用Dart編寫的,是否可以通過websockets(或普通的REST)發送「Dart對象」,以便類型信息保留在另一個上結束?或者我需要通過JSON或類似的方式序列化/反序列化?還是我在這裏思考的東西?我可以自動序列化通過Web套接字發送的Dart對象嗎?
關於奧斯卡
您將需要以某種方式序列化對象飛鏢。你可以試試JSON,或者你可以試試重型serialization package。
自定義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};
}
}
注: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);
和
您可以使用「導出」包來渲染類JSON或地圖更聲明的方式。
import 'package:exportable/exportable.dart';
class Product extends Object with Exportable
{
@export String ProductName;
@export num UnitPrice;
@export bool Discontinued;
@export num UnitsInStock;
Product(this.ProductName, this.UnitPrice, this.Discontinued, this.UnitsInStock);
}
Product prod = new Product("First", 1.0, false, 3);
var json = prod.toJson(); // {"ProductName":"First","UnitPrice":1.0,"Discontinued":false,"UnitsInStock":3}
既然我們在話題上:在dart2js代碼中使用鏡像對象自動序列化的狀態是什麼? –
序列化庫測試(使用鏡像進行自動序列化)傳遞dart2js。這些鏡像可能不適合代碼大小或性能,但對於這一點已經足夠好了。 –
我猜'dart:json'不存在了,你應該使用'json:convert'來代替:https://www.dartlang.org/guides/libraries/library-tour#dartconvert---decoding-and -encoding-JSON UTF-8 - 和 - 多 – martin