[ VM / Service ] Use same default value logic in toJson as _fromJson

Bug: https://github.com/dart-lang/webdev/issues/1741
Change-Id: I86df5591c3b302e88f76a2f7031215df18bb1431
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/258100
Reviewed-by: Ben Konyi <bkonyi@google.com>
Commit-Queue: Liam Appelbe <liama@google.com>
diff --git a/pkg/vm_service/lib/src/vm_service.dart b/pkg/vm_service/lib/src/vm_service.dart
index 821b717..782a241 100644
--- a/pkg/vm_service/lib/src/vm_service.dart
+++ b/pkg/vm_service/lib/src/vm_service.dart
@@ -2983,11 +2983,11 @@
     final json = <String, dynamic>{};
     json['type'] = type;
     json.addAll({
-      'name': name,
+      'name': name ?? '',
       'value': value?.toJson(),
-      'declarationTokenPos': declarationTokenPos,
-      'scopeStartTokenPos': scopeStartTokenPos,
-      'scopeEndTokenPos': scopeEndTokenPos,
+      'declarationTokenPos': declarationTokenPos ?? -1,
+      'scopeStartTokenPos': scopeStartTokenPos ?? -1,
+      'scopeEndTokenPos': scopeEndTokenPos ?? -1,
     });
     return json;
   }
@@ -3055,9 +3055,9 @@
     final json = super.toJson();
     json['type'] = type;
     json.addAll({
-      'breakpointNumber': breakpointNumber,
-      'enabled': enabled,
-      'resolved': resolved,
+      'breakpointNumber': breakpointNumber ?? -1,
+      'enabled': enabled ?? false,
+      'resolved': resolved ?? false,
       'location': location?.toJson(),
     });
     _setIfNotNull(
@@ -3126,7 +3126,7 @@
     final json = super.toJson();
     json['type'] = type;
     json.addAll({
-      'name': name,
+      'name': name ?? '',
       'library': library?.toJson(),
     });
     _setIfNotNull(json, 'location', location?.toJson());
@@ -3272,11 +3272,11 @@
     final json = super.toJson();
     json['type'] = type;
     json.addAll({
-      'name': name,
+      'name': name ?? '',
       'library': library?.toJson(),
-      'abstract': isAbstract,
-      'const': isConst,
-      'traceAllocations': traceAllocations,
+      'abstract': isAbstract ?? false,
+      'const': isConst ?? false,
+      'traceAllocations': traceAllocations ?? false,
       'interfaces': interfaces?.map((f) => f.toJson()).toList(),
       'fields': fields?.map((f) => f.toJson()).toList(),
       'functions': functions?.map((f) => f.toJson()).toList(),
@@ -3346,10 +3346,10 @@
     json['type'] = type;
     json.addAll({
       'class': classRef?.toJson(),
-      'accumulatedSize': accumulatedSize,
-      'bytesCurrent': bytesCurrent,
-      'instancesAccumulated': instancesAccumulated,
-      'instancesCurrent': instancesCurrent,
+      'accumulatedSize': accumulatedSize ?? -1,
+      'bytesCurrent': bytesCurrent ?? -1,
+      'instancesAccumulated': instancesAccumulated ?? -1,
+      'instancesCurrent': instancesCurrent ?? -1,
     });
     return json;
   }
@@ -3423,8 +3423,8 @@
     final json = super.toJson();
     json['type'] = type;
     json.addAll({
-      'name': name,
-      'kind': kind,
+      'name': name ?? '',
+      'kind': kind ?? '',
     });
     return json;
   }
@@ -3468,8 +3468,8 @@
     final json = super.toJson();
     json['type'] = type;
     json.addAll({
-      'name': name,
-      'kind': kind,
+      'name': name ?? '',
+      'kind': kind ?? '',
     });
     return json;
   }
@@ -3507,7 +3507,7 @@
     final json = super.toJson();
     json['type'] = type;
     json.addAll({
-      'length': length,
+      'length': length ?? -1,
     });
     return json;
   }
@@ -3562,7 +3562,7 @@
     final json = super.toJson();
     json['type'] = type;
     json.addAll({
-      'length': length,
+      'length': length ?? -1,
       'variables': variables?.map((f) => f.toJson()).toList(),
     });
     _setIfNotNull(json, 'parent', parent?.toJson());
@@ -3682,13 +3682,13 @@
     final json = <String, dynamic>{};
     json['type'] = type;
     json.addAll({
-      'samplePeriod': samplePeriod,
-      'maxStackDepth': maxStackDepth,
-      'sampleCount': sampleCount,
-      'timeSpan': timeSpan,
-      'timeOriginMicros': timeOriginMicros,
-      'timeExtentMicros': timeExtentMicros,
-      'pid': pid,
+      'samplePeriod': samplePeriod ?? -1,
+      'maxStackDepth': maxStackDepth ?? -1,
+      'sampleCount': sampleCount ?? -1,
+      'timeSpan': timeSpan ?? -1,
+      'timeOriginMicros': timeOriginMicros ?? -1,
+      'timeExtentMicros': timeExtentMicros ?? -1,
+      'pid': pid ?? -1,
       'functions': functions?.map((f) => f.toJson()).toList(),
       'samples': samples?.map((f) => f.toJson()).toList(),
     });
@@ -3768,13 +3768,13 @@
   Map<String, dynamic> toJson() {
     final json = <String, dynamic>{};
     json.addAll({
-      'samplePeriod': samplePeriod,
-      'maxStackDepth': maxStackDepth,
-      'sampleCount': sampleCount,
-      'timeSpan': timeSpan,
-      'timeOriginMicros': timeOriginMicros,
-      'timeExtentMicros': timeExtentMicros,
-      'pid': pid,
+      'samplePeriod': samplePeriod ?? -1,
+      'maxStackDepth': maxStackDepth ?? -1,
+      'sampleCount': sampleCount ?? -1,
+      'timeSpan': timeSpan ?? -1,
+      'timeOriginMicros': timeOriginMicros ?? -1,
+      'timeExtentMicros': timeExtentMicros ?? -1,
+      'pid': pid ?? -1,
       'functions': functions?.map((f) => f.toJson()).toList(),
       'samples': samples?.map((f) => f.toJson()).toList(),
     });
@@ -3857,8 +3857,8 @@
   Map<String, dynamic> toJson() {
     final json = <String, dynamic>{};
     json.addAll({
-      'tid': tid,
-      'timestamp': timestamp,
+      'tid': tid ?? -1,
+      'timestamp': timestamp ?? -1,
       'stack': stack?.map((f) => f).toList(),
     });
     _setIfNotNull(json, 'vmTag', vmTag);
@@ -3905,8 +3905,8 @@
     final json = super.toJson();
     json['type'] = type;
     json.addAll({
-      'kind': kind,
-      'message': message,
+      'kind': kind ?? '',
+      'message': message ?? '',
     });
     return json;
   }
@@ -3968,8 +3968,8 @@
     final json = super.toJson();
     json['type'] = type;
     json.addAll({
-      'kind': kind,
-      'message': message,
+      'kind': kind ?? '',
+      'message': message ?? '',
     });
     _setIfNotNull(json, 'exception', exception?.toJson());
     _setIfNotNull(json, 'stacktrace', stacktrace?.toJson());
@@ -4281,8 +4281,8 @@
     final json = <String, dynamic>{};
     json['type'] = type;
     json.addAll({
-      'kind': kind,
-      'timestamp': timestamp,
+      'kind': kind ?? '',
+      'timestamp': timestamp ?? -1,
     });
     _setIfNotNull(json, 'isolate', isolate?.toJson());
     _setIfNotNull(json, 'vm', vm?.toJson());
@@ -4390,12 +4390,12 @@
     final json = super.toJson();
     json['type'] = type;
     json.addAll({
-      'name': name,
+      'name': name ?? '',
       'owner': owner?.toJson(),
       'declaredType': declaredType?.toJson(),
-      'const': isConst,
-      'final': isFinal,
-      'static': isStatic,
+      'const': isConst ?? false,
+      'final': isFinal ?? false,
+      'static': isStatic ?? false,
     });
     _setIfNotNull(json, 'location', location?.toJson());
     return json;
@@ -4490,12 +4490,12 @@
     final json = super.toJson();
     json['type'] = type;
     json.addAll({
-      'name': name,
+      'name': name ?? '',
       'owner': owner?.toJson(),
       'declaredType': declaredType?.toJson(),
-      'const': isConst,
-      'final': isFinal,
-      'static': isStatic,
+      'const': isConst ?? false,
+      'final': isFinal ?? false,
+      'static': isStatic ?? false,
     });
     _setIfNotNull(json, 'location', location?.toJson());
     _setIfNotNull(json, 'staticValue', staticValue?.toJson());
@@ -4548,9 +4548,9 @@
   Map<String, dynamic> toJson() {
     final json = <String, dynamic>{};
     json.addAll({
-      'name': name,
-      'comment': comment,
-      'modified': modified,
+      'name': name ?? '',
+      'comment': comment ?? '',
+      'modified': modified ?? false,
     });
     _setIfNotNull(json, 'valueAsString', valueAsString);
     return json;
@@ -4646,7 +4646,7 @@
     final json = <String, dynamic>{};
     json['type'] = type;
     json.addAll({
-      'index': index,
+      'index': index ?? -1,
     });
     _setIfNotNull(json, 'function', function?.toJson());
     _setIfNotNull(json, 'code', code?.toJson());
@@ -4729,12 +4729,12 @@
     final json = super.toJson();
     json['type'] = type;
     json.addAll({
-      'name': name,
+      'name': name ?? '',
       'owner': owner?.toJson(),
-      'static': isStatic,
-      'const': isConst,
-      'implicit': implicit,
-      'abstract': isAbstract,
+      'static': isStatic ?? false,
+      'const': isConst ?? false,
+      'implicit': implicit ?? false,
+      'abstract': isAbstract ?? false,
     });
     _setIfNotNull(json, 'location', location?.toJson());
     return json;
@@ -4831,12 +4831,12 @@
     final json = super.toJson();
     json['type'] = type;
     json.addAll({
-      'name': name,
+      'name': name ?? '',
       'owner': owner?.toJson(),
-      'static': isStatic,
-      'const': isConst,
-      'implicit': implicit,
-      'abstract': isAbstract,
+      'static': isStatic ?? false,
+      'const': isConst ?? false,
+      'implicit': implicit ?? false,
+      'abstract': isAbstract ?? false,
       'signature': signature?.toJson(),
     });
     _setIfNotNull(json, 'location', location?.toJson());
@@ -5074,8 +5074,8 @@
     final json = super.toJson();
     json['type'] = type;
     json.addAll({
-      'kind': kind,
-      'identityHashCode': identityHashCode,
+      'kind': kind ?? '',
+      'identityHashCode': identityHashCode ?? -1,
       'class': classRef?.toJson(),
     });
     _setIfNotNull(json, 'valueAsString', valueAsString);
@@ -5533,8 +5533,8 @@
     final json = super.toJson();
     json['type'] = type;
     json.addAll({
-      'kind': kind,
-      'identityHashCode': identityHashCode,
+      'kind': kind ?? '',
+      'identityHashCode': identityHashCode ?? -1,
       'class': classRef?.toJson(),
     });
     _setIfNotNull(json, 'valueAsString', valueAsString);
@@ -5627,11 +5627,11 @@
     final json = <String, dynamic>{};
     json['type'] = type;
     json.addAll({
-      'id': id,
-      'number': number,
-      'name': name,
-      'isSystemIsolate': isSystemIsolate,
-      'isolateGroupId': isolateGroupId,
+      'id': id ?? '',
+      'number': number ?? '',
+      'name': name ?? '',
+      'isSystemIsolate': isSystemIsolate ?? false,
+      'isolateGroupId': isolateGroupId ?? '',
     });
     return json;
   }
@@ -5774,20 +5774,20 @@
     final json = <String, dynamic>{};
     json['type'] = type;
     json.addAll({
-      'id': id,
-      'number': number,
-      'name': name,
-      'isSystemIsolate': isSystemIsolate,
-      'isolateGroupId': isolateGroupId,
+      'id': id ?? '',
+      'number': number ?? '',
+      'name': name ?? '',
+      'isSystemIsolate': isSystemIsolate ?? false,
+      'isolateGroupId': isolateGroupId ?? '',
       'isolateFlags': isolateFlags?.map((f) => f.toJson()).toList(),
-      'startTime': startTime,
-      'runnable': runnable,
-      'livePorts': livePorts,
-      'pauseOnExit': pauseOnExit,
+      'startTime': startTime ?? -1,
+      'runnable': runnable ?? false,
+      'livePorts': livePorts ?? -1,
+      'pauseOnExit': pauseOnExit ?? false,
       'pauseEvent': pauseEvent?.toJson(),
       'libraries': libraries?.map((f) => f.toJson()).toList(),
       'breakpoints': breakpoints?.map((f) => f.toJson()).toList(),
-      'exceptionPauseMode': exceptionPauseMode,
+      'exceptionPauseMode': exceptionPauseMode ?? '',
     });
     _setIfNotNull(json, 'rootLib', rootLib?.toJson());
     _setIfNotNull(json, 'error', error?.toJson());
@@ -5826,8 +5826,8 @@
   Map<String, dynamic> toJson() {
     final json = <String, dynamic>{};
     json.addAll({
-      'name': name,
-      'valueAsString': valueAsString,
+      'name': name ?? '',
+      'valueAsString': valueAsString ?? '',
     });
     return json;
   }
@@ -5877,10 +5877,10 @@
     final json = <String, dynamic>{};
     json['type'] = type;
     json.addAll({
-      'id': id,
-      'number': number,
-      'name': name,
-      'isSystemIsolateGroup': isSystemIsolateGroup,
+      'id': id ?? '',
+      'number': number ?? '',
+      'name': name ?? '',
+      'isSystemIsolateGroup': isSystemIsolateGroup ?? false,
     });
     return json;
   }
@@ -5941,10 +5941,10 @@
     final json = <String, dynamic>{};
     json['type'] = type;
     json.addAll({
-      'id': id,
-      'number': number,
-      'name': name,
-      'isSystemIsolateGroup': isSystemIsolateGroup,
+      'id': id ?? '',
+      'number': number ?? '',
+      'name': name ?? '',
+      'isSystemIsolateGroup': isSystemIsolateGroup ?? false,
       'isolates': isolates?.map((f) => f.toJson()).toList(),
     });
     return json;
@@ -6070,7 +6070,7 @@
     final json = <String, dynamic>{};
     json['type'] = type;
     json.addAll({
-      'totalCount': totalCount,
+      'totalCount': totalCount ?? -1,
       'instances': instances?.map((f) => f.toJson()).toList(),
     });
     return json;
@@ -6112,8 +6112,8 @@
     final json = super.toJson();
     json['type'] = type;
     json.addAll({
-      'name': name,
-      'uri': uri,
+      'name': name ?? '',
+      'uri': uri ?? '',
     });
     return json;
   }
@@ -6198,9 +6198,9 @@
     final json = super.toJson();
     json['type'] = type;
     json.addAll({
-      'name': name,
-      'uri': uri,
-      'debuggable': debuggable,
+      'name': name ?? '',
+      'uri': uri ?? '',
+      'debuggable': debuggable ?? false,
       'dependencies': dependencies?.map((f) => f.toJson()).toList(),
       'scripts': scripts?.map((f) => f.toJson()).toList(),
       'variables': variables?.map((f) => f.toJson()).toList(),
@@ -6264,9 +6264,9 @@
   Map<String, dynamic> toJson() {
     final json = <String, dynamic>{};
     json.addAll({
-      'isImport': isImport,
-      'isDeferred': isDeferred,
-      'prefix': prefix,
+      'isImport': isImport ?? false,
+      'isDeferred': isDeferred ?? false,
+      'prefix': prefix ?? '',
       'target': target?.toJson(),
     });
     _setIfNotNull(json, 'shows', shows?.map((f) => f).toList());
@@ -6346,9 +6346,9 @@
     json['type'] = type;
     json.addAll({
       'message': message?.toJson(),
-      'time': time,
-      'level': level,
-      'sequenceNumber': sequenceNumber,
+      'time': time ?? -1,
+      'level': level ?? -1,
+      'sequenceNumber': sequenceNumber ?? -1,
       'loggerName': loggerName?.toJson(),
       'zone': zone?.toJson(),
       'error': error?.toJson(),
@@ -6439,9 +6439,9 @@
     final json = <String, dynamic>{};
     json['type'] = type;
     json.addAll({
-      'externalUsage': externalUsage,
-      'heapCapacity': heapCapacity,
-      'heapUsage': heapUsage,
+      'externalUsage': externalUsage ?? -1,
+      'heapCapacity': heapCapacity ?? -1,
+      'heapUsage': heapUsage ?? -1,
     });
     return json;
   }
@@ -6507,10 +6507,10 @@
     final json = <String, dynamic>{};
     json['type'] = type;
     json.addAll({
-      'index': index,
-      'name': name,
-      'messageObjectId': messageObjectId,
-      'size': size,
+      'index': index ?? -1,
+      'name': name ?? '',
+      'messageObjectId': messageObjectId ?? '',
+      'size': size ?? -1,
     });
     _setIfNotNull(json, 'handler', handler?.toJson());
     _setIfNotNull(json, 'location', location?.toJson());
@@ -6542,7 +6542,7 @@
   Map<String, dynamic> toJson() {
     final json = <String, dynamic>{};
     json.addAll({
-      'name': name,
+      'name': name ?? '',
     });
     return json;
   }
@@ -6588,7 +6588,7 @@
     final json = super.toJson();
     json['type'] = type;
     json.addAll({
-      'valueAsString': valueAsString,
+      'valueAsString': valueAsString ?? '',
     });
     return json;
   }
@@ -6640,7 +6640,7 @@
     final json = super.toJson();
     json['type'] = type;
     json.addAll({
-      'valueAsString': valueAsString,
+      'valueAsString': valueAsString ?? '',
     });
     return json;
   }
@@ -6687,7 +6687,7 @@
     final json = <String, dynamic>{};
     json['type'] = type;
     json.addAll({
-      'id': id,
+      'id': id ?? '',
     });
     _setIfNotNull(json, 'fixedId', fixedId);
     return json;
@@ -6761,7 +6761,7 @@
     final json = <String, dynamic>{};
     json['type'] = type;
     json.addAll({
-      'id': id,
+      'id': id ?? '',
     });
     _setIfNotNull(json, 'fixedId', fixedId);
     _setIfNotNull(json, 'class', classRef?.toJson());
@@ -6817,7 +6817,7 @@
     final json = <String, dynamic>{};
     json.addAll({
       'parameterType': parameterType?.toJson(),
-      'fixed': fixed,
+      'fixed': fixed ?? false,
     });
     _setIfNotNull(json, 'name', name);
     _setIfNotNull(json, 'required', required);
@@ -6907,10 +6907,10 @@
   Map<String, dynamic> toJson() {
     final json = <String, dynamic>{};
     json.addAll({
-      'kind': kind,
-      'inclusiveTicks': inclusiveTicks,
-      'exclusiveTicks': exclusiveTicks,
-      'resolvedUrl': resolvedUrl,
+      'kind': kind ?? '',
+      'inclusiveTicks': inclusiveTicks ?? -1,
+      'exclusiveTicks': exclusiveTicks ?? -1,
+      'resolvedUrl': resolvedUrl ?? '',
       'function': function?.toJson(),
     });
     return json;
@@ -6987,9 +6987,9 @@
   Map<String, dynamic> toJson() {
     final json = <String, dynamic>{};
     json.addAll({
-      'protocolName': protocolName,
-      'major': major,
-      'minor': minor,
+      'protocolName': protocolName ?? '',
+      'major': major ?? -1,
+      'minor': minor ?? -1,
     });
     return json;
   }
@@ -7068,9 +7068,9 @@
   Map<String, dynamic> toJson() {
     final json = <String, dynamic>{};
     json.addAll({
-      'name': name,
-      'description': description,
-      'size': size,
+      'name': name ?? '',
+      'description': description ?? '',
+      'size': size ?? -1,
       'children': children?.map((f) => f.toJson()).toList(),
     });
     return json;
@@ -7104,7 +7104,7 @@
     final json = <String, dynamic>{};
     json['type'] = type;
     json.addAll({
-      'success': success,
+      'success': success ?? false,
     });
     return json;
   }
@@ -7200,8 +7200,8 @@
     final json = <String, dynamic>{};
     json['type'] = type;
     json.addAll({
-      'length': length,
-      'gcRootType': gcRootType,
+      'length': length ?? -1,
+      'gcRootType': gcRootType ?? '',
       'elements': elements?.map((f) => f.toJson()).toList(),
     });
     return json;
@@ -7270,8 +7270,8 @@
     final json = <String, dynamic>{};
     json['type'] = type;
     json.addAll({
-      'kind': kind,
-      'valueAsString': valueAsString,
+      'kind': kind ?? '',
+      'valueAsString': valueAsString ?? '',
     });
     return json;
   }
@@ -7307,7 +7307,7 @@
     final json = super.toJson();
     json['type'] = type;
     json.addAll({
-      'uri': uri,
+      'uri': uri ?? '',
     });
     return json;
   }
@@ -7436,7 +7436,7 @@
     final json = super.toJson();
     json['type'] = type;
     json.addAll({
-      'uri': uri,
+      'uri': uri ?? '',
       'library': library?.toJson(),
     });
     _setIfNotNull(json, 'lineOffset', lineOffset);
@@ -7538,7 +7538,7 @@
     json['type'] = type;
     json.addAll({
       'script': script?.toJson(),
-      'tokenPos': tokenPos,
+      'tokenPos': tokenPos ?? -1,
     });
     _setIfNotNull(json, 'endTokenPos', endTokenPos);
     _setIfNotNull(json, 'line', line);
@@ -7714,10 +7714,10 @@
   Map<String, dynamic> toJson() {
     final json = <String, dynamic>{};
     json.addAll({
-      'scriptIndex': scriptIndex,
-      'startPos': startPos,
-      'endPos': endPos,
-      'compiled': compiled,
+      'scriptIndex': scriptIndex ?? -1,
+      'startPos': startPos ?? -1,
+      'endPos': endPos ?? -1,
+      'compiled': compiled ?? false,
     });
     _setIfNotNull(json, 'error', error?.toJson());
     _setIfNotNull(json, 'coverage', coverage?.toJson());
@@ -7799,7 +7799,7 @@
     json.addAll({
       'frames': frames?.map((f) => f.toJson()).toList(),
       'messages': messages?.map((f) => f.toJson()).toList(),
-      'truncated': truncated,
+      'truncated': truncated ?? false,
     });
     _setIfNotNull(json, 'asyncCausalFrames',
         asyncCausalFrames?.map((f) => f.toJson()).toList());
@@ -7874,8 +7874,8 @@
     json['type'] = type;
     json.addAll({
       'traceEvents': traceEvents?.map((f) => f.toJson()).toList(),
-      'timeOriginMicros': timeOriginMicros,
-      'timeExtentMicros': timeExtentMicros,
+      'timeOriginMicros': timeOriginMicros ?? -1,
+      'timeExtentMicros': timeExtentMicros ?? -1,
     });
     return json;
   }
@@ -7944,7 +7944,7 @@
     final json = <String, dynamic>{};
     json['type'] = type;
     json.addAll({
-      'recorderName': recorderName,
+      'recorderName': recorderName ?? '',
       'availableStreams': availableStreams?.map((f) => f).toList(),
       'recordedStreams': recordedStreams?.map((f) => f).toList(),
     });
@@ -7979,7 +7979,7 @@
     final json = <String, dynamic>{};
     json['type'] = type;
     json.addAll({
-      'timestamp': timestamp,
+      'timestamp': timestamp ?? -1,
     });
     return json;
   }
@@ -8015,7 +8015,7 @@
     final json = super.toJson();
     json['type'] = type;
     json.addAll({
-      'name': name,
+      'name': name ?? '',
     });
     return json;
   }
@@ -8065,7 +8065,7 @@
     final json = super.toJson();
     json['type'] = type;
     json.addAll({
-      'name': name,
+      'name': name ?? '',
       'types': types?.map((f) => f.toJson()).toList(),
     });
     return json;
@@ -8258,8 +8258,8 @@
     final json = <String, dynamic>{};
     json['type'] = type;
     json.addAll({
-      'major': major,
-      'minor': minor,
+      'major': major ?? -1,
+      'minor': minor ?? -1,
     });
     return json;
   }
@@ -8291,7 +8291,7 @@
     final json = <String, dynamic>{};
     json['type'] = type;
     json.addAll({
-      'name': name,
+      'name': name ?? '',
     });
     return json;
   }
@@ -8389,14 +8389,14 @@
     final json = <String, dynamic>{};
     json['type'] = type;
     json.addAll({
-      'name': name,
-      'architectureBits': architectureBits,
-      'hostCPU': hostCPU,
-      'operatingSystem': operatingSystem,
-      'targetCPU': targetCPU,
-      'version': version,
-      'pid': pid,
-      'startTime': startTime,
+      'name': name ?? '',
+      'architectureBits': architectureBits ?? -1,
+      'hostCPU': hostCPU ?? '',
+      'operatingSystem': operatingSystem ?? '',
+      'targetCPU': targetCPU ?? '',
+      'version': version ?? '',
+      'pid': pid ?? -1,
+      'startTime': startTime ?? -1,
       'isolates': isolates?.map((f) => f.toJson()).toList(),
       'isolateGroups': isolateGroups?.map((f) => f.toJson()).toList(),
       'systemIsolates': systemIsolates?.map((f) => f.toJson()).toList(),
diff --git a/pkg/vm_service/tool/dart/generate_dart.dart b/pkg/vm_service/tool/dart/generate_dart.dart
index f972a69..e4b26fd 100644
--- a/pkg/vm_service/tool/dart/generate_dart.dart
+++ b/pkg/vm_service/tool/dart/generate_dart.dart
@@ -1397,38 +1397,8 @@
         } else {
           gen.write("${field.generatableName} = json['${field.name}']");
         }
-        if (field.defaultValue != null) {
-          gen.write(' ?? ${field.defaultValue}');
-        } else if (!field.optional) {
-          // If a default isn't provided and the field is required, generate a
-          // sane default initializer to avoid TypeErrors at runtime when
-          // running in a null-safe context.
-          dynamic defaultValue;
-          switch (field.type.name) {
-            case 'int':
-            case 'num':
-            case 'double':
-              defaultValue = -1;
-              break;
-            case 'bool':
-              defaultValue = false;
-              break;
-            case 'String':
-              defaultValue = "''";
-              break;
-            case 'ByteData':
-              defaultValue = "ByteData(0)";
-              break;
-            default:
-              {
-                if (field.type.isEnum) {
-                  // TODO(bkonyi): Figure out if there's a more correct way to
-                  // determine a default value for enums.
-                  defaultValue = "''";
-                }
-                break;
-              }
-          }
+        final defaultValue = field.defaultValue;
+        if (defaultValue != null) {
           gen.write(' ?? $defaultValue');
         }
         gen.writeln(';');
@@ -1674,8 +1644,9 @@
   void generateSerializedFieldAccess(TypeField field, DartGenerator gen) {
     if (field.type.isSimple || field.type.isEnum) {
       gen.write('${field.generatableName}');
-      if (field.defaultValue != null) {
-        gen.write(' ?? ${field.defaultValue}');
+      final defaultValue = field.defaultValue;
+      if (defaultValue != null) {
+        gen.write(' ?? $defaultValue');
       }
     } else if (name == 'Event' && field.name == 'extensionData') {
       // Special case `Event.extensionData`.
@@ -1785,7 +1756,7 @@
   MemberType type = MemberType();
   String? name;
   bool optional = false;
-  String? defaultValue;
+  String? _defaultValue;
   bool overrides = false;
 
   TypeField(this.parent, this._docs);
@@ -1806,6 +1777,40 @@
     return _nameRemap[name] != null ? _nameRemap[name] : name;
   }
 
+  set defaultValue(String? value) {
+    _defaultValue = value;
+  }
+
+  String? get defaultValue {
+    if (_defaultValue != null) {
+      return _defaultValue;
+    }
+    if (optional) {
+      return null;
+    }
+    // If a default isn't provided and the field is required, generate a sane
+    // default initializer to avoid TypeErrors at runtime when running in a
+    // null-safe context.
+    switch (type.name) {
+      case 'int':
+      case 'num':
+      case 'double':
+        return '-1';
+      case 'bool':
+        return 'false';
+      case 'String':
+        return "''";
+      case 'ByteData':
+        return "ByteData(0)";
+    }
+    if (type.isEnum) {
+      // TODO(bkonyi): Figure out if there's a more correct way to determine a
+      // default value for enums.
+      return "''";
+    }
+    return null;
+  }
+
   void generate(DartGenerator gen) {
     if (docs!.isNotEmpty) gen.writeDocs(docs);
     if (optional) gen.write('@optional ');