2013-08-24 85 views
2

我剛剛看到有一些運行Dart Web服務器的庫,如Start。 所以我在想這樣的事情.. 如果客戶端和服務器代碼都是用Dart編寫的,是否可以通過websockets(或普通的REST)發送「Dart對象」,以便類型信息保留在另一個上結束?或者我需要通過JSON或類似的方式序列化/反序列化?還是我在這裏思考的東西?我可以自動序列化通過Web套接字發送的Dart對象嗎?

關於奧斯卡

回答

7

您將需要以某種方式序列化對象飛鏢。你可以試試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); 

​​
+0

既然我們在話題上:在dart2js代碼中使用鏡像對象自動序列化的狀態是什麼? –

+0

序列化庫測試(使用鏡像進行自動序列化)傳遞dart2js。這些鏡像可能不適合代碼大小或性能,但對於這一點已經足夠好了。 –

+0

我猜'dart:json'不存在了,你應該使用'json:convert'來代替:https://www.dartlang.org/guides/libraries/library-tour#dartconvert---decoding-and -encoding-JSON UTF-8 - 和 - 多 – martin

3

您可以使用「導出」包來渲染類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} 
相關問題