10

次のコードの場合

var address = new Address();
address.street = 'N 34th';
address.city = 'Seattle';
var serialization = new Serialization()
 ..addRuleFor(address);
String output = serialization.write(address);

次のようなjson出力を取得するにはどうすればよいですか:

address: {'street':'N 34th', 'city':'Seattle'}

上記のコードによって生成される出力は次のとおりです。

{"roots":[{"__Ref":true,"rule":3,"object":0}],"data":[[],[],[],[["Seattle","N 34th"]]],"rules":"{\"roots\":[{\"__Ref\":true,\"rule\":1,\"object\":0}],\"data\":[[],[[{\"__Ref\":true,\"rule\":4,\"object\":0},{\"__Ref\":true,\"rule\":3,\"object\":0},{\"__Ref\":true,\"rule\":5,\"object\":0},{\"__Ref\":true,\"rule\":6,\"object\":0}]],[[],[],[\"city\",\"street\"]],[[]],[[]],[[]],[[{\"__Ref\":true,\"rule\":2,\"object\":0},{\"__Ref\":true,\"rule\":2,\"object\":1},\"\",{\"__Ref\":true,\"rule\":2,\"object\":2},{\"__Ref\":true,\"rule\":7,\"object\":0}]],[\"Address\"]],\"rules\":null}"}
4

3 に答える 3

12

ライブラリを使用すると、dart:jsonこれが非常に簡単になることがわかります。toJsonそれを機能させるには、クラスに実装する必要があります。

例えば:

class Address {
  String street;
  String city;

  Map toJson() {
    return {"street": street, "city": city};
  }
}

main() {
  var addr = new Address();
  addr.street = 'N 34th';
  addr.city = 'Seattle';
  print(JSON.stringify(addr));
}

どちらが出力されますか:

{"street":"N 34th","city":"Seattle"}
于 2012-12-19T18:21:57.257 に答える
1

JsonObject for Dartを使用し、これをpubspec.yamlファイルに追加してから実行できますpub install(ツール -> Pub インストール) 。

dependencies:
  json_object: 
    git: git://github.com/chrisbu/dartwatch-JsonObject.git

そして、コードを call に変更しますobjectToJson:

import 'package:json_object/json_object.dart';

var address = new Address();
address.street = 'N 34th';
address.city = 'Seattle';
String output =  objectToJson(address);

objectToJson現時点では Dart VM でのみ機能するミラー サポート (リフレクション機能) が必要であることに注意してください。2012-12-20 現在、dart2js では動作しません。

于 2012-12-19T15:59:50.487 に答える
0

シリアル化ではなく dart:json パッケージが必要だと思います。シリアライゼーションからの出力は JSON ですが、シリアライズされた構造の JSON であり、見ているものに対して過剰なサイクルの処理などについて心配しています。基本的な json パッケージを使用すると、変換を行う toJson() メソッドを実装でき、基本的なシステム オブジェクトは自動的に処理されます。これにはミラーを必要としないという利点があるため、現在の dartj2s で動作します。または、前の回答のように json_object を使用できます。

于 2012-12-19T18:19:14.750 に答える