From f795049b70766c2104da1633218ca6034776bd62 Mon Sep 17 00:00:00 2001
From: Frederik Carlier <frederik.carlier@quamotion.mobi>
Date: Wed, 9 Nov 2016 23:14:37 +0100
Subject: [PATCH] Better support for optional values: - Set NullValueHandling
 to NullValueHandling.Ignore, so that null values are not serialized - If .NET
 primitive types (like bool or long) are optional, use nulltable types, so
 that they can be ignored when serializing

---
 .../Protocol/Chrome/Accessibility/AXNode.cs   |  4 +
 .../Chrome/Accessibility/AXPropertySource.cs  |  4 +-
 .../Chrome/Accessibility/AXRelatedNode.cs     |  1 +
 .../Protocol/Chrome/Accessibility/AXValue.cs  |  4 +
 .../Accessibility/GetAXNodeCommandResponse.cs |  1 +
 .../Chrome/Animation/AnimationNode.cs         |  1 +
 .../Animation/AnimationPlayerCanceledEvent.cs |  2 +-
 .../Animation/AnimationPlayerCreatedEvent.cs  |  2 +-
 .../Chrome/Animation/KeyframesRule.cs         |  1 +
 .../ApplicationCacheStatusUpdatedEvent.cs     |  2 +-
 .../NetworkStateUpdatedEvent.cs               |  2 +-
 .../Protocol/Chrome/CSS/CSSMedia.cs           |  4 +
 .../Protocol/Chrome/CSS/CSSProperty.cs        | 14 +++-
 .../Protocol/Chrome/CSS/CSSRule.cs            |  2 +
 .../Protocol/Chrome/CSS/CSSStyle.cs           |  3 +
 .../Chrome/CSS/CSSStyleSheetHeader.cs         |  7 +-
 .../GetInlineStylesForNodeCommandResponse.cs  |  2 +
 .../CSS/GetMatchedStylesForNodeCommand.cs     |  6 +-
 .../GetMatchedStylesForNodeCommandResponse.cs |  3 +
 .../Chrome/CSS/InheritedStyleEntry.cs         |  1 +
 .../Chrome/CSS/MediaQueryExpression.cs        |  2 +
 .../CSS/MediaQueryResultChangedEvent.cs       |  2 +-
 .../Protocol/Chrome/CSS/Selector.cs           |  1 +
 .../Chrome/CSS/StyleSheetAddedEvent.cs        |  2 +-
 .../Chrome/CSS/StyleSheetChangedEvent.cs      |  2 +-
 .../Chrome/CSS/StyleSheetRemovedEvent.cs      |  2 +-
 .../Protocol/Chrome/Canvas/Call.cs            | 18 ++++-
 .../Protocol/Chrome/Canvas/CallArgument.cs    |  5 ++
 .../Chrome/Canvas/CaptureFrameCommand.cs      |  1 +
 .../Chrome/Canvas/ContextCreatedEvent.cs      |  2 +-
 .../EvaluateTraceLogCallArgumentCommand.cs    |  1 +
 ...uateTraceLogCallArgumentCommandResponse.cs |  2 +
 .../Chrome/Canvas/GetTraceLogCommand.cs       |  6 +-
 .../Protocol/Chrome/Canvas/ResourceState.cs   |  2 +
 .../Chrome/Canvas/ResourceStateDescriptor.cs  |  6 +-
 .../Chrome/Canvas/StartCapturingCommand.cs    |  1 +
 .../Chrome/Canvas/TraceLogsRemovedEvent.cs    |  4 +-
 .../Chrome/Console/AsyncStackTrace.cs         |  1 +
 .../Protocol/Chrome/Console/ConsoleMessage.cs | 19 ++++-
 .../Chrome/Console/MessageAddedEvent.cs       |  2 +-
 .../Console/MessageRepeatCountUpdatedEvent.cs |  2 +-
 .../Chrome/Console/MessagesClearedEvent.cs    |  2 +-
 .../Chrome/DOM/AttributeModifiedEvent.cs      |  2 +-
 .../Chrome/DOM/AttributeRemovedEvent.cs       |  2 +-
 .../Protocol/Chrome/DOM/BoxModel.cs           |  1 +
 .../Chrome/DOM/CharacterDataModifiedEvent.cs  |  2 +-
 .../Chrome/DOM/ChildNodeCountUpdatedEvent.cs  |  2 +-
 .../Chrome/DOM/ChildNodeInsertedEvent.cs      |  2 +-
 .../Chrome/DOM/ChildNodeRemovedEvent.cs       |  2 +-
 .../Protocol/Chrome/DOM/CopyToCommand.cs      |  3 +-
 .../DOM/DistributedNodesUpdatedEvent.cs       |  2 +-
 .../Chrome/DOM/DocumentUpdatedEvent.cs        |  2 +-
 .../Protocol/Chrome/DOM/EventListener.cs      |  1 +
 .../DOM/GetEventListenersForNodeCommand.cs    |  1 +
 .../Protocol/Chrome/DOM/HighlightConfig.cs    | 16 +++-
 .../Chrome/DOM/HighlightFrameCommand.cs       |  2 +
 .../Chrome/DOM/HighlightNodeCommand.cs        |  7 +-
 .../Chrome/DOM/HighlightQuadCommand.cs        |  2 +
 .../Chrome/DOM/HighlightRectCommand.cs        |  2 +
 .../Chrome/DOM/InlineStyleInvalidatedEvent.cs |  2 +-
 .../Chrome/DOM/InspectNodeRequestedEvent.cs   |  2 +-
 .../Protocol/Chrome/DOM/MoveToCommand.cs      |  3 +-
 .../Protocol/Chrome/DOM/Node.cs               | 22 ++++-
 .../Chrome/DOM/PerformSearchCommand.cs        |  3 +-
 .../Chrome/DOM/PseudoElementAddedEvent.cs     |  2 +-
 .../Chrome/DOM/PseudoElementRemovedEvent.cs   |  2 +-
 .../Protocol/Chrome/DOM/RGBA.cs               |  1 +
 .../Chrome/DOM/RequestChildNodesCommand.cs    |  3 +-
 .../Protocol/Chrome/DOM/ResolveNodeCommand.cs |  1 +
 .../Chrome/DOM/SetAttributesAsTextCommand.cs  |  1 +
 .../Protocol/Chrome/DOM/SetChildNodesEvent.cs |  2 +-
 .../DOM/SetInspectModeEnabledCommand.cs       |  4 +-
 .../Chrome/DOM/ShadowRootPoppedEvent.cs       |  2 +-
 .../Chrome/DOM/ShadowRootPushedEvent.cs       |  2 +-
 .../RemoveEventListenerBreakpointCommand.cs   |  1 +
 .../SetEventListenerBreakpointCommand.cs      |  1 +
 .../DOMStorage/DomStorageItemAddedEvent.cs    |  2 +-
 .../DOMStorage/DomStorageItemRemovedEvent.cs  |  2 +-
 .../DOMStorage/DomStorageItemUpdatedEvent.cs  |  2 +-
 .../DOMStorage/DomStorageItemsClearedEvent.cs |  2 +-
 .../Chrome/Database/AddDatabaseEvent.cs       |  2 +-
 .../Database/ExecuteSQLCommandResponse.cs     |  3 +
 .../Chrome/Debugger/AsyncOperation.cs         |  2 +
 .../Debugger/AsyncOperationCompletedEvent.cs  |  2 +-
 .../Debugger/AsyncOperationStartedEvent.cs    |  2 +-
 .../Debugger/BreakpointResolvedEvent.cs       |  2 +-
 .../Protocol/Chrome/Debugger/CallFrame.cs     |  2 +
 .../Chrome/Debugger/CollectionEntry.cs        |  1 +
 .../Chrome/Debugger/CompileScriptCommand.cs   |  3 +-
 .../Debugger/CompileScriptCommandResponse.cs  |  2 +
 .../Debugger/ContinueToLocationCommand.cs     |  3 +-
 .../Debugger/EnablePromiseTrackerCommand.cs   |  3 +-
 .../Debugger/EvaluateOnCallFrameCommand.cs    | 13 ++-
 .../EvaluateOnCallFrameCommandResponse.cs     |  4 +-
 .../Chrome/Debugger/ExceptionDetails.cs       |  9 ++-
 .../Chrome/Debugger/FunctionDetails.cs        |  2 +
 .../Chrome/Debugger/GeneratorObjectDetails.cs |  1 +
 .../Debugger/GetBacktraceCommandResponse.cs   |  1 +
 .../Chrome/Debugger/GetPromiseByIdCommand.cs  |  1 +
 .../GetStepInPositionsCommandResponse.cs      |  1 +
 .../Debugger/GlobalObjectClearedEvent.cs      |  2 +-
 .../Protocol/Chrome/Debugger/Location.cs      |  3 +-
 .../Protocol/Chrome/Debugger/PausedEvent.cs   |  5 +-
 .../Chrome/Debugger/PromiseDetails.cs         | 10 ++-
 .../Chrome/Debugger/PromiseUpdatedEvent.cs    |  2 +-
 .../Debugger/RestartFrameCommandResponse.cs   |  1 +
 .../Protocol/Chrome/Debugger/ResumedEvent.cs  |  2 +-
 .../Chrome/Debugger/RunScriptCommand.cs       |  7 +-
 .../Debugger/RunScriptCommandResponse.cs      |  1 +
 .../Debugger/ScriptFailedToParseEvent.cs      | 12 ++-
 .../Chrome/Debugger/ScriptParsedEvent.cs      | 12 ++-
 .../Chrome/Debugger/SearchInContentCommand.cs |  6 +-
 .../Debugger/SetBreakpointByUrlCommand.cs     |  6 +-
 .../Chrome/Debugger/SetBreakpointCommand.cs   |  1 +
 .../Chrome/Debugger/SetScriptSourceCommand.cs |  3 +-
 .../SetScriptSourceCommandResponse.cs         |  3 +
 .../Chrome/Debugger/SetScriptSourceError.cs   |  1 +
 .../Debugger/SetVariableValueCommand.cs       |  2 +
 .../Chrome/Debugger/SkipStackFramesCommand.cs |  4 +-
 .../Protocol/Chrome/Debugger/StackTrace.cs    |  2 +
 .../SetDeviceMetricsOverrideCommand.cs        |  3 +
 .../SetGeolocationOverrideCommand.cs          |  3 +
 .../SetTouchEmulationEnabledCommand.cs        |  1 +
 .../Chrome/Emulation/ViewportChangedEvent.cs  |  2 +-
 .../Protocol/Chrome/FileSystem/Entry.cs       |  5 +-
 .../RequestDirectoryContentCommandResponse.cs |  1 +
 .../FileSystem/RequestFileContentCommand.cs   |  7 +-
 .../RequestFileContentCommandResponse.cs      |  2 +
 .../RequestFileSystemRootCommandResponse.cs   |  1 +
 .../RequestMetadataCommandResponse.cs         |  1 +
 .../HeapProfiler/AddHeapSnapshotChunkEvent.cs |  2 +-
 .../GetObjectByHeapObjectIdCommand.cs         |  1 +
 .../HeapProfiler/HeapStatsUpdateEvent.cs      |  2 +-
 .../HeapProfiler/LastSeenObjectIdEvent.cs     |  2 +-
 .../ReportHeapSnapshotProgressEvent.cs        |  5 +-
 .../Chrome/HeapProfiler/ResetProfilesEvent.cs |  2 +-
 .../StartTrackingHeapObjectsCommand.cs        |  3 +-
 .../StopTrackingHeapObjectsCommand.cs         |  3 +-
 .../HeapProfiler/TakeHeapSnapshotCommand.cs   |  3 +-
 .../Protocol/Chrome/IndexedDB/Key.cs          |  4 +
 .../Protocol/Chrome/IndexedDB/KeyPath.cs      |  2 +
 .../Protocol/Chrome/IndexedDB/KeyRange.cs     |  2 +
 .../Chrome/IndexedDB/RequestDataCommand.cs    |  1 +
 .../Chrome/Input/DispatchKeyEventCommand.cs   | 23 ++++--
 .../Chrome/Input/DispatchMouseEventCommand.cs |  8 +-
 .../Chrome/Input/DispatchTouchEventCommand.cs |  4 +-
 .../EmulateTouchFromMouseEventCommand.cs      |  8 +-
 .../Input/SynthesizePinchGestureCommand.cs    |  4 +-
 .../Input/SynthesizeScrollGestureCommand.cs   | 19 +++--
 .../Input/SynthesizeTapGestureCommand.cs      |  7 +-
 .../Protocol/Chrome/Input/TouchPoint.cs       |  9 ++-
 .../Chrome/Inspector/DetachedEvent.cs         |  2 +-
 .../EvaluateForTestInFrontendEvent.cs         |  2 +-
 .../Protocol/Chrome/Inspector/InspectEvent.cs |  2 +-
 .../Chrome/Inspector/TargetCrashedEvent.cs    |  2 +-
 .../Protocol/Chrome/LayerTree/Layer.cs        | 12 ++-
 .../Chrome/LayerTree/LayerPaintedEvent.cs     |  2 +-
 .../LayerTree/LayerTreeDidChangeEvent.cs      |  3 +-
 .../LayerTree/ProfileSnapshotCommand.cs       |  5 +-
 .../Chrome/LayerTree/ReplaySnapshotCommand.cs |  7 +-
 .../Protocol/Chrome/Network/CachedResource.cs |  1 +
 .../Chrome/Network/DataReceivedEvent.cs       |  2 +-
 .../EventSourceMessageReceivedEvent.cs        |  2 +-
 .../Protocol/Chrome/Network/Initiator.cs      |  4 +
 .../Chrome/Network/LoadingFailedEvent.cs      |  5 +-
 .../Chrome/Network/LoadingFinishedEvent.cs    |  2 +-
 .../Protocol/Chrome/Network/Request.cs        |  1 +
 .../Network/RequestServedFromCacheEvent.cs    |  2 +-
 .../Chrome/Network/RequestWillBeSentEvent.cs  |  4 +-
 .../Protocol/Chrome/Network/Response.cs       | 15 +++-
 .../Chrome/Network/ResponseReceivedEvent.cs   |  2 +-
 .../Chrome/Network/WebSocketClosedEvent.cs    |  2 +-
 .../Chrome/Network/WebSocketCreatedEvent.cs   |  2 +-
 .../Network/WebSocketFrameErrorEvent.cs       |  2 +-
 .../Network/WebSocketFrameReceivedEvent.cs    |  2 +-
 .../Chrome/Network/WebSocketFrameSentEvent.cs |  2 +-
 ...WebSocketHandshakeResponseReceivedEvent.cs |  2 +-
 .../Chrome/Network/WebSocketResponse.cs       |  3 +
 .../WebSocketWillSendHandshakeRequestEvent.cs |  2 +-
 .../Protocol/Chrome/Page/ColorPickedEvent.cs  |  2 +-
 .../Chrome/Page/DomContentEventFiredEvent.cs  |  2 +-
 .../Protocol/Chrome/Page/Frame.cs             |  2 +
 .../Chrome/Page/FrameAttachedEvent.cs         |  2 +-
 .../FrameClearedScheduledNavigationEvent.cs   |  2 +-
 .../Chrome/Page/FrameDetachedEvent.cs         |  2 +-
 .../Chrome/Page/FrameNavigatedEvent.cs        |  2 +-
 .../Protocol/Chrome/Page/FrameResizedEvent.cs |  2 +-
 .../Protocol/Chrome/Page/FrameResourceTree.cs |  7 +-
 .../Page/FrameScheduledNavigationEvent.cs     |  2 +-
 .../Chrome/Page/FrameStartedLoadingEvent.cs   |  2 +-
 .../Chrome/Page/FrameStoppedLoadingEvent.cs   |  2 +-
 .../Page/HandleJavaScriptDialogCommand.cs     |  1 +
 .../Chrome/Page/InterstitialHiddenEvent.cs    |  2 +-
 .../Chrome/Page/InterstitialShownEvent.cs     |  2 +-
 .../Page/JavascriptDialogClosedEvent.cs       |  2 +-
 .../Page/JavascriptDialogOpeningEvent.cs      |  2 +-
 .../Chrome/Page/LoadEventFiredEvent.cs        |  2 +-
 .../Protocol/Chrome/Page/ReloadCommand.cs     |  4 +-
 .../Chrome/Page/ScreencastFrameEvent.cs       |  5 +-
 .../Chrome/Page/ScreencastFrameMetadata.cs    |  1 +
 .../Page/ScreencastVisibilityChangedEvent.cs  |  2 +-
 .../Chrome/Page/SearchInResourceCommand.cs    |  6 +-
 .../Page/SetDeviceMetricsOverrideCommand.cs   |  3 +
 .../Page/SetGeolocationOverrideCommand.cs     |  3 +
 .../Chrome/Page/SetOverlayMessageCommand.cs   |  1 +
 .../SetShowViewportSizeOnResizeCommand.cs     |  3 +-
 .../Page/SetTouchEmulationEnabledCommand.cs   |  1 +
 .../Chrome/Page/StartScreencastCommand.cs     | 10 ++-
 .../Chrome/Power/DataAvailableEvent.cs        |  2 +-
 .../Protocol/Chrome/Profiler/CPUProfile.cs    |  2 +
 .../Profiler/ConsoleProfileFinishedEvent.cs   |  3 +-
 .../Profiler/ConsoleProfileStartedEvent.cs    |  3 +-
 .../Protocol/Chrome/Runtime/CallArgument.cs   |  3 +
 .../Chrome/Runtime/CallFunctionOnCommand.cs   | 10 ++-
 .../Runtime/CallFunctionOnCommandResponse.cs  |  3 +-
 .../Protocol/Chrome/Runtime/CustomPreview.cs  |  1 +
 .../Protocol/Chrome/Runtime/EntryPreview.cs   |  1 +
 .../Chrome/Runtime/EvaluateCommand.cs         | 16 ++--
 .../Chrome/Runtime/EvaluateCommandResponse.cs |  4 +-
 .../Protocol/Chrome/Runtime/EventListener.cs  |  1 +
 .../Runtime/ExecutionContextCreatedEvent.cs   |  2 +-
 .../Runtime/ExecutionContextDescription.cs    |  3 +-
 .../Runtime/ExecutionContextDestroyedEvent.cs |  2 +-
 .../Runtime/ExecutionContextsClearedEvent.cs  |  2 +-
 .../Runtime/GetEventListenersCommand.cs       |  1 +
 .../Chrome/Runtime/GetPropertiesCommand.cs    |  9 ++-
 .../Runtime/GetPropertiesCommandResponse.cs   |  1 +
 .../Runtime/InternalPropertyDescriptor.cs     |  1 +
 .../Protocol/Chrome/Runtime/ObjectPreview.cs  |  3 +
 .../Chrome/Runtime/PropertyDescriptor.cs      | 13 ++-
 .../Chrome/Runtime/PropertyPreview.cs         |  3 +
 .../Protocol/Chrome/Runtime/RemoteObject.cs   |  7 ++
 .../ServiceWorker/DebugOnStartUpdatedEvent.cs |  2 +-
 .../ServiceWorker/DispatchMessageEvent.cs     |  2 +-
 .../ServiceWorkerRegistration.cs              |  3 +-
 .../ServiceWorker/ServiceWorkerVersion.cs     |  2 +
 .../ServiceWorker/WorkerCreatedEvent.cs       |  2 +-
 .../ServiceWorker/WorkerErrorReportedEvent.cs |  2 +-
 .../WorkerRegistrationUpdatedEvent.cs         |  2 +-
 .../ServiceWorker/WorkerTerminatedEvent.cs    |  2 +-
 .../WorkerVersionUpdatedEvent.cs              |  2 +-
 .../Chrome/Timeline/EventRecordedEvent.cs     |  2 +-
 .../Protocol/Chrome/Timeline/StartCommand.cs  | 13 ++-
 .../Protocol/Chrome/Timeline/TimelineEvent.cs |  5 ++
 .../Chrome/Tracing/BufferUsageEvent.cs        |  5 +-
 .../Chrome/Tracing/DataCollectedEvent.cs      |  2 +-
 .../Protocol/Chrome/Tracing/StartCommand.cs   |  3 +
 .../Chrome/Tracing/TracingCompleteEvent.cs    |  2 +-
 .../Worker/DispatchMessageFromWorkerEvent.cs  |  2 +-
 .../Chrome/Worker/WorkerCreatedEvent.cs       |  2 +-
 .../Chrome/Worker/WorkerTerminatedEvent.cs    |  2 +-
 .../ApplicationCacheStatusUpdatedEvent.cs     |  2 +-
 .../NetworkStateUpdatedEvent.cs               |  2 +-
 .../Protocol/iOS/CSS/CSSMedia.cs              |  4 +-
 .../Protocol/iOS/CSS/CSSProperty.cs           | 10 ++-
 .../Protocol/iOS/CSS/CSSPropertyInfo.cs       |  2 +
 .../Protocol/iOS/CSS/CSSRule.cs               |  3 +
 .../Protocol/iOS/CSS/CSSSelector.cs           |  4 +-
 .../Protocol/iOS/CSS/CSSStyle.cs              |  5 ++
 .../Protocol/iOS/CSS/CSSStyleSheetBody.cs     |  1 +
 .../GetInlineStylesForNodeCommandResponse.cs  |  2 +
 .../iOS/CSS/GetMatchedStylesForNodeCommand.cs |  6 +-
 .../GetMatchedStylesForNodeCommandResponse.cs |  3 +
 .../Protocol/iOS/CSS/InheritedStyleEntry.cs   |  1 +
 .../iOS/CSS/MediaQueryResultChangedEvent.cs   |  2 +-
 .../Protocol/iOS/CSS/NamedFlowCreatedEvent.cs |  2 +-
 .../Protocol/iOS/CSS/NamedFlowRemovedEvent.cs |  2 +-
 .../iOS/CSS/RegionOversetChangedEvent.cs      |  2 +-
 .../RegisteredNamedFlowContentElementEvent.cs |  2 +-
 .../Protocol/iOS/CSS/SelectorList.cs          |  1 +
 .../Protocol/iOS/CSS/StyleSheetAddedEvent.cs  |  2 +-
 .../iOS/CSS/StyleSheetChangedEvent.cs         |  2 +-
 .../iOS/CSS/StyleSheetRemovedEvent.cs         |  2 +-
 ...nregisteredNamedFlowContentElementEvent.cs |  2 +-
 .../Protocol/iOS/Console/ConsoleMessage.cs    | 14 +++-
 .../Protocol/iOS/Console/MessageAddedEvent.cs |  2 +-
 .../Console/MessageRepeatCountUpdatedEvent.cs |  2 +-
 .../iOS/Console/MessagesClearedEvent.cs       |  2 +-
 .../iOS/DOM/AccessibilityProperties.cs        | 54 +++++++++----
 .../iOS/DOM/AttributeModifiedEvent.cs         |  2 +-
 .../Protocol/iOS/DOM/AttributeRemovedEvent.cs |  2 +-
 .../iOS/DOM/CharacterDataModifiedEvent.cs     |  2 +-
 .../iOS/DOM/ChildNodeCountUpdatedEvent.cs     |  2 +-
 .../iOS/DOM/ChildNodeInsertedEvent.cs         |  2 +-
 .../Protocol/iOS/DOM/ChildNodeRemovedEvent.cs |  2 +-
 .../Protocol/iOS/DOM/DocumentUpdatedEvent.cs  |  2 +-
 .../Protocol/iOS/DOM/EventListener.cs         |  3 +
 .../DOM/GetEventListenersForNodeCommand.cs    |  1 +
 .../Protocol/iOS/DOM/HighlightConfig.cs       |  7 +-
 .../Protocol/iOS/DOM/HighlightFrameCommand.cs |  2 +
 .../Protocol/iOS/DOM/HighlightNodeCommand.cs  |  4 +-
 .../Protocol/iOS/DOM/HighlightQuadCommand.cs  |  5 +-
 .../Protocol/iOS/DOM/HighlightRectCommand.cs  |  5 +-
 .../iOS/DOM/HighlightSelectorCommand.cs       |  1 +
 .../iOS/DOM/InlineStyleInvalidatedEvent.cs    |  2 +-
 .../Protocol/iOS/DOM/MoveToCommand.cs         |  3 +-
 .../ChromeDevTools/Protocol/iOS/DOM/Node.cs   | 20 ++++-
 .../Protocol/iOS/DOM/PerformSearchCommand.cs  |  1 +
 .../iOS/DOM/PseudoElementAddedEvent.cs        |  2 +-
 .../iOS/DOM/PseudoElementRemovedEvent.cs      |  2 +-
 .../Protocol/iOS/DOM/RGBAColor.cs             |  1 +
 .../iOS/DOM/RequestChildNodesCommand.cs       |  3 +-
 .../Protocol/iOS/DOM/ResolveNodeCommand.cs    |  1 +
 .../iOS/DOM/SetAttributesAsTextCommand.cs     |  1 +
 .../Protocol/iOS/DOM/SetChildNodesEvent.cs    |  2 +-
 .../iOS/DOM/SetInspectModeEnabledCommand.cs   |  1 +
 .../Protocol/iOS/DOM/ShadowRootPoppedEvent.cs |  2 +-
 .../Protocol/iOS/DOM/ShadowRootPushedEvent.cs |  2 +-
 .../DOMStorage/DomStorageItemAddedEvent.cs    |  2 +-
 .../DOMStorage/DomStorageItemRemovedEvent.cs  |  2 +-
 .../DOMStorage/DomStorageItemUpdatedEvent.cs  |  2 +-
 .../DOMStorage/DomStorageItemsClearedEvent.cs |  2 +-
 .../Protocol/iOS/Database/AddDatabaseEvent.cs |  2 +-
 .../iOS/Database/ExecuteSQLCommandResponse.cs |  3 +
 .../iOS/Debugger/AssertPauseReason.cs         |  1 +
 .../Protocol/iOS/Debugger/BreakpointAction.cs |  4 +-
 .../iOS/Debugger/BreakpointOptions.cs         |  8 +-
 .../iOS/Debugger/BreakpointResolvedEvent.cs   |  2 +-
 .../iOS/Debugger/DidSampleProbeEvent.cs       |  2 +-
 .../Debugger/EvaluateOnCallFrameCommand.cs    | 16 ++--
 .../EvaluateOnCallFrameCommandResponse.cs     |  6 +-
 .../Protocol/iOS/Debugger/FunctionDetails.cs  |  4 +
 .../iOS/Debugger/GlobalObjectClearedEvent.cs  |  2 +-
 .../Protocol/iOS/Debugger/Location.cs         |  3 +-
 .../Protocol/iOS/Debugger/PausedEvent.cs      |  3 +-
 .../PlayBreakpointActionSoundEvent.cs         |  2 +-
 .../Protocol/iOS/Debugger/ResumedEvent.cs     |  2 +-
 .../iOS/Debugger/ScriptFailedToParseEvent.cs  |  2 +-
 .../iOS/Debugger/ScriptParsedEvent.cs         |  9 ++-
 .../iOS/Debugger/SearchInContentCommand.cs    |  6 +-
 .../iOS/Debugger/SetBreakpointByUrlCommand.cs |  6 +-
 .../iOS/Debugger/SetBreakpointCommand.cs      |  1 +
 .../iOS/Debugger/SetOverlayMessageCommand.cs  |  1 +
 .../Protocol/iOS/IndexedDB/Key.cs             |  4 +
 .../Protocol/iOS/IndexedDB/KeyPath.cs         |  2 +
 .../Protocol/iOS/IndexedDB/KeyRange.cs        |  2 +
 .../iOS/IndexedDB/RequestDataCommand.cs       |  1 +
 .../Inspector/ActivateExtraDomainsEvent.cs    |  2 +-
 .../Protocol/iOS/Inspector/DetachedEvent.cs   |  2 +-
 .../EvaluateForTestInFrontendEvent.cs         |  2 +-
 .../Protocol/iOS/Inspector/InspectEvent.cs    |  2 +-
 .../iOS/Inspector/TargetCrashedEvent.cs       |  2 +-
 .../iOS/LayerTree/CompositingReasons.cs       | 81 ++++++++++++-------
 .../Protocol/iOS/LayerTree/Layer.cs           | 14 +++-
 .../iOS/LayerTree/LayerTreeDidChangeEvent.cs  |  2 +-
 .../Protocol/iOS/Network/CachedResource.cs    |  2 +
 .../Protocol/iOS/Network/DataReceivedEvent.cs |  2 +-
 .../Protocol/iOS/Network/Initiator.cs         |  3 +
 .../iOS/Network/LoadingFailedEvent.cs         |  5 +-
 .../iOS/Network/LoadingFinishedEvent.cs       |  3 +-
 .../Protocol/iOS/Network/Request.cs           |  1 +
 .../Network/RequestServedFromCacheEvent.cs    |  2 +-
 .../RequestServedFromMemoryCacheEvent.cs      |  2 +-
 .../iOS/Network/RequestWillBeSentEvent.cs     |  4 +-
 .../Protocol/iOS/Network/Response.cs          |  7 +-
 .../iOS/Network/ResponseReceivedEvent.cs      |  2 +-
 .../iOS/Network/WebSocketClosedEvent.cs       |  2 +-
 .../iOS/Network/WebSocketCreatedEvent.cs      |  2 +-
 .../iOS/Network/WebSocketFrameErrorEvent.cs   |  2 +-
 .../Network/WebSocketFrameReceivedEvent.cs    |  2 +-
 .../iOS/Network/WebSocketFrameSentEvent.cs    |  2 +-
 ...WebSocketHandshakeResponseReceivedEvent.cs |  2 +-
 .../WebSocketWillSendHandshakeRequestEvent.cs |  2 +-
 .../Protocol/iOS/OverlayTypes/ElementData.cs  |  6 ++
 .../iOS/OverlayTypes/FragmentHighlightData.cs |  1 +
 .../iOS/OverlayTypes/NodeHighlightData.cs     |  1 +
 .../Protocol/iOS/OverlayTypes/Region.cs       |  3 +-
 .../iOS/OverlayTypes/ShapeOutsideData.cs      |  2 +
 .../iOS/Page/DomContentEventFiredEvent.cs     |  2 +-
 .../ChromeDevTools/Protocol/iOS/Page/Frame.cs |  2 +
 .../FrameClearedScheduledNavigationEvent.cs   |  2 +-
 .../Protocol/iOS/Page/FrameDetachedEvent.cs   |  2 +-
 .../Protocol/iOS/Page/FrameNavigatedEvent.cs  |  2 +-
 .../Protocol/iOS/Page/FrameResource.cs        |  7 +-
 .../Protocol/iOS/Page/FrameResourceTree.cs    |  1 +
 .../iOS/Page/FrameScheduledNavigationEvent.cs |  2 +-
 .../iOS/Page/FrameStartedLoadingEvent.cs      |  2 +-
 .../iOS/Page/FrameStoppedLoadingEvent.cs      |  2 +-
 .../iOS/Page/HandleJavaScriptDialogCommand.cs |  1 +
 .../iOS/Page/JavascriptDialogClosedEvent.cs   |  2 +-
 .../iOS/Page/JavascriptDialogOpeningEvent.cs  |  2 +-
 .../Protocol/iOS/Page/LoadEventFiredEvent.cs  |  2 +-
 .../Protocol/iOS/Page/ReloadCommand.cs        |  4 +-
 .../Protocol/iOS/Page/ScriptsEnabledEvent.cs  |  2 +-
 .../iOS/Page/SearchInResourceCommand.cs       |  6 +-
 .../iOS/Page/SearchInResourcesCommand.cs      |  6 +-
 .../Protocol/iOS/Runtime/CallArgument.cs      |  2 +
 .../iOS/Runtime/CallFunctionOnCommand.cs      | 10 ++-
 .../Runtime/CallFunctionOnCommandResponse.cs  |  3 +-
 .../Protocol/iOS/Runtime/CollectionEntry.cs   |  1 +
 .../Protocol/iOS/Runtime/EntryPreview.cs      |  1 +
 .../Protocol/iOS/Runtime/EvaluateCommand.cs   | 19 +++--
 .../iOS/Runtime/EvaluateCommandResponse.cs    |  6 +-
 .../Runtime/ExecutionContextCreatedEvent.cs   |  2 +-
 .../Runtime/GetCollectionEntriesCommand.cs    |  7 +-
 .../GetDisplayablePropertiesCommand.cs        |  3 +-
 ...GetDisplayablePropertiesCommandResponse.cs |  1 +
 .../iOS/Runtime/GetPropertiesCommand.cs       |  6 +-
 .../Runtime/GetPropertiesCommandResponse.cs   |  1 +
 .../iOS/Runtime/InternalPropertyDescriptor.cs |  1 +
 .../Protocol/iOS/Runtime/ObjectPreview.cs     | 10 ++-
 .../iOS/Runtime/ParseCommandResponse.cs       |  2 +
 .../iOS/Runtime/PropertyDescriptor.cs         | 16 +++-
 .../Protocol/iOS/Runtime/PropertyPreview.cs   |  6 +-
 .../Protocol/iOS/Runtime/RemoteObject.cs      | 10 ++-
 .../Protocol/iOS/Runtime/SaveResultCommand.cs |  3 +-
 .../iOS/Runtime/SaveResultCommandResponse.cs  |  3 +-
 .../iOS/Runtime/StructureDescription.cs       |  7 +-
 .../Protocol/iOS/Runtime/TypeDescription.cs   |  6 +-
 .../Protocol/iOS/Timeline/CPUProfile.cs       |  1 +
 .../Protocol/iOS/Timeline/CPUProfileNode.cs   |  9 ++-
 .../iOS/Timeline/EventRecordedEvent.cs        |  2 +-
 .../iOS/Timeline/RecordingStartedEvent.cs     |  2 +-
 .../iOS/Timeline/RecordingStoppedEvent.cs     |  2 +-
 .../Protocol/iOS/Timeline/StartCommand.cs     |  3 +-
 .../Protocol/iOS/Timeline/TimelineEvent.cs    |  1 +
 .../iOS/Worker/DisconnectedFromWorkerEvent.cs |  2 +-
 .../Worker/DispatchMessageFromWorkerEvent.cs  |  2 +-
 .../Protocol/iOS/Worker/WorkerCreatedEvent.cs |  2 +-
 .../iOS/Worker/WorkerTerminatedEvent.cs       |  2 +-
 .../SerializationTests.cs                     | 18 ++++-
 source/ProtocolGenerator/Program.cs           | 15 ++++
 422 files changed, 1171 insertions(+), 431 deletions(-)

diff --git a/source/ChromeDevTools/Protocol/Chrome/Accessibility/AXNode.cs b/source/ChromeDevTools/Protocol/Chrome/Accessibility/AXNode.cs
index 4a5b642..e9e8770 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Accessibility/AXNode.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Accessibility/AXNode.cs
@@ -21,18 +21,22 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Accessibility
 		/// <summary>
 		/// Gets or sets The accessible name for this <code>Node</code>.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public AXValue Name { get; set; }
 		/// <summary>
 		/// Gets or sets The accessible description for this <code>Node</code>.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public AXValue Description { get; set; }
 		/// <summary>
 		/// Gets or sets The value for this <code>Node</code>.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public AXValue Value { get; set; }
 		/// <summary>
 		/// Gets or sets Help.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public AXValue Help { get; set; }
 		/// <summary>
 		/// Gets or sets All other properties
diff --git a/source/ChromeDevTools/Protocol/Chrome/Accessibility/AXPropertySource.cs b/source/ChromeDevTools/Protocol/Chrome/Accessibility/AXPropertySource.cs
index 637a7cf..c6aee5f 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Accessibility/AXPropertySource.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Accessibility/AXPropertySource.cs
@@ -29,10 +29,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Accessibility
 		/// <summary>
 		/// Gets or sets Whether the value for this property is invalid.
 		/// </summary>
-		public bool Invalid { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Invalid { get; set; }
 		/// <summary>
 		/// Gets or sets Reason for the value being invalid, if it is.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string InvalidReason { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Accessibility/AXRelatedNode.cs b/source/ChromeDevTools/Protocol/Chrome/Accessibility/AXRelatedNode.cs
index 9df636a..a71fea1 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Accessibility/AXRelatedNode.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Accessibility/AXRelatedNode.cs
@@ -13,6 +13,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Accessibility
 		/// <summary>
 		/// Gets or sets The IDRef value provided, if any.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Idref { get; set; }
 		/// <summary>
 		/// Gets or sets The BackendNodeId of the related node.
diff --git a/source/ChromeDevTools/Protocol/Chrome/Accessibility/AXValue.cs b/source/ChromeDevTools/Protocol/Chrome/Accessibility/AXValue.cs
index 3c15f59..faa253e 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Accessibility/AXValue.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Accessibility/AXValue.cs
@@ -17,18 +17,22 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Accessibility
 		/// <summary>
 		/// Gets or sets The computed value of this property.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public object Value { get; set; }
 		/// <summary>
 		/// Gets or sets The related node value, if any.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public AXRelatedNode RelatedNodeValue { get; set; }
 		/// <summary>
 		/// Gets or sets Multiple relted nodes, if applicable.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public AXRelatedNode[] RelatedNodeArrayValue { get; set; }
 		/// <summary>
 		/// Gets or sets The sources which contributed to the computation of this property.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public AXPropertySource[] Sources { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Accessibility/GetAXNodeCommandResponse.cs b/source/ChromeDevTools/Protocol/Chrome/Accessibility/GetAXNodeCommandResponse.cs
index ec2dce6..e83341d 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Accessibility/GetAXNodeCommandResponse.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Accessibility/GetAXNodeCommandResponse.cs
@@ -14,6 +14,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Accessibility
 		/// <summary>
 		/// Gets or sets The <code>Accessibility.AXNode</code> for this DOM node, if it exists.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public AXNode AccessibilityNode { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Animation/AnimationNode.cs b/source/ChromeDevTools/Protocol/Chrome/Animation/AnimationNode.cs
index 953803e..d14a393 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Animation/AnimationNode.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Animation/AnimationNode.cs
@@ -53,6 +53,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Animation
 		/// <summary>
 		/// Gets or sets <code>AnimationNode</code>'s keyframes.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public KeyframesRule KeyframesRule { get; set; }
 		/// <summary>
 		/// Gets or sets <code>AnimationNode</code>'s timing function.
diff --git a/source/ChromeDevTools/Protocol/Chrome/Animation/AnimationPlayerCanceledEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Animation/AnimationPlayerCanceledEvent.cs
index 1149c37..9371e78 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Animation/AnimationPlayerCanceledEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Animation/AnimationPlayerCanceledEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Animation
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Animation/AnimationPlayerCreatedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Animation/AnimationPlayerCreatedEvent.cs
index 2b91750..4b29a0b 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Animation/AnimationPlayerCreatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Animation/AnimationPlayerCreatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Animation
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Animation/KeyframesRule.cs b/source/ChromeDevTools/Protocol/Chrome/Animation/KeyframesRule.cs
index 69a1998..065e907 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Animation/KeyframesRule.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Animation/KeyframesRule.cs
@@ -13,6 +13,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Animation
 		/// <summary>
 		/// Gets or sets CSS keyframed animation's name.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Name { get; set; }
 		/// <summary>
 		/// Gets or sets List of animation keyframes.
diff --git a/source/ChromeDevTools/Protocol/Chrome/ApplicationCache/ApplicationCacheStatusUpdatedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/ApplicationCache/ApplicationCacheStatusUpdatedEvent.cs
index df2fb9c..391babb 100644
--- a/source/ChromeDevTools/Protocol/Chrome/ApplicationCache/ApplicationCacheStatusUpdatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/ApplicationCache/ApplicationCacheStatusUpdatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.ApplicationCache
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/ApplicationCache/NetworkStateUpdatedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/ApplicationCache/NetworkStateUpdatedEvent.cs
index 0084c74..1d21a4b 100644
--- a/source/ChromeDevTools/Protocol/Chrome/ApplicationCache/NetworkStateUpdatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/ApplicationCache/NetworkStateUpdatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.ApplicationCache
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/CSS/CSSMedia.cs b/source/ChromeDevTools/Protocol/Chrome/CSS/CSSMedia.cs
index 46a6b23..20f2a00 100644
--- a/source/ChromeDevTools/Protocol/Chrome/CSS/CSSMedia.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/CSS/CSSMedia.cs
@@ -21,18 +21,22 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.CSS
 		/// <summary>
 		/// Gets or sets URL of the document containing the media query description.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string SourceURL { get; set; }
 		/// <summary>
 		/// Gets or sets The associated rule (@media or @import) header range in the enclosing stylesheet (if available).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public SourceRange Range { get; set; }
 		/// <summary>
 		/// Gets or sets Identifier of the stylesheet containing this object (if exists).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ParentStyleSheetId { get; set; }
 		/// <summary>
 		/// Gets or sets Array of media queries.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public MediaQuery[] MediaList { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/CSS/CSSProperty.cs b/source/ChromeDevTools/Protocol/Chrome/CSS/CSSProperty.cs
index 345843e..db6fdc2 100644
--- a/source/ChromeDevTools/Protocol/Chrome/CSS/CSSProperty.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/CSS/CSSProperty.cs
@@ -21,26 +21,32 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.CSS
 		/// <summary>
 		/// Gets or sets Whether the property has "!important" annotation (implies <code>false</code> if absent).
 		/// </summary>
-		public bool Important { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Important { get; set; }
 		/// <summary>
 		/// Gets or sets Whether the property is implicit (implies <code>false</code> if absent).
 		/// </summary>
-		public bool Implicit { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Implicit { get; set; }
 		/// <summary>
 		/// Gets or sets The full property text as specified in the style.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Text { get; set; }
 		/// <summary>
 		/// Gets or sets Whether the property is understood by the browser (implies <code>true</code> if absent).
 		/// </summary>
-		public bool ParsedOk { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? ParsedOk { get; set; }
 		/// <summary>
 		/// Gets or sets Whether the property is disabled by the user (present for source-based properties only).
 		/// </summary>
-		public bool Disabled { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Disabled { get; set; }
 		/// <summary>
 		/// Gets or sets The entire property range in the enclosing style declaration (if available).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public SourceRange Range { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/CSS/CSSRule.cs b/source/ChromeDevTools/Protocol/Chrome/CSS/CSSRule.cs
index bae5f0e..223a91f 100644
--- a/source/ChromeDevTools/Protocol/Chrome/CSS/CSSRule.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/CSS/CSSRule.cs
@@ -13,6 +13,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.CSS
 		/// <summary>
 		/// Gets or sets The css style sheet identifier (absent for user agent stylesheet and user-specified stylesheet rules) this rule came from.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string StyleSheetId { get; set; }
 		/// <summary>
 		/// Gets or sets Rule selector data.
@@ -29,6 +30,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.CSS
 		/// <summary>
 		/// Gets or sets Media list array (for rules involving media queries). The array enumerates media queries starting with the innermost one, going outwards.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public CSSMedia[] Media { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/CSS/CSSStyle.cs b/source/ChromeDevTools/Protocol/Chrome/CSS/CSSStyle.cs
index c956794..e8494d5 100644
--- a/source/ChromeDevTools/Protocol/Chrome/CSS/CSSStyle.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/CSS/CSSStyle.cs
@@ -13,6 +13,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.CSS
 		/// <summary>
 		/// Gets or sets The css style sheet identifier (absent for user agent stylesheet and user-specified stylesheet rules) this rule came from.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string StyleSheetId { get; set; }
 		/// <summary>
 		/// Gets or sets CSS properties in the style.
@@ -25,10 +26,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.CSS
 		/// <summary>
 		/// Gets or sets Style declaration text (if available).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string CssText { get; set; }
 		/// <summary>
 		/// Gets or sets Style declaration range in the enclosing stylesheet (if available).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public SourceRange Range { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/CSS/CSSStyleSheetHeader.cs b/source/ChromeDevTools/Protocol/Chrome/CSS/CSSStyleSheetHeader.cs
index 99d3eae..5944a4c 100644
--- a/source/ChromeDevTools/Protocol/Chrome/CSS/CSSStyleSheetHeader.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/CSS/CSSStyleSheetHeader.cs
@@ -25,6 +25,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.CSS
 		/// <summary>
 		/// Gets or sets URL of source map associated with the stylesheet (if any).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string SourceMapURL { get; set; }
 		/// <summary>
 		/// Gets or sets Stylesheet origin.
@@ -37,7 +38,8 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.CSS
 		/// <summary>
 		/// Gets or sets The backend id for the owner node of the stylesheet.
 		/// </summary>
-		public long OwnerNode { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? OwnerNode { get; set; }
 		/// <summary>
 		/// Gets or sets Denotes whether the stylesheet is disabled.
 		/// </summary>
@@ -45,7 +47,8 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.CSS
 		/// <summary>
 		/// Gets or sets Whether the sourceURL field value comes from the sourceURL comment.
 		/// </summary>
-		public bool HasSourceURL { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? HasSourceURL { get; set; }
 		/// <summary>
 		/// Gets or sets Whether this stylesheet is created for STYLE tag by parser. This flag is not set for document.written STYLE tags.
 		/// </summary>
diff --git a/source/ChromeDevTools/Protocol/Chrome/CSS/GetInlineStylesForNodeCommandResponse.cs b/source/ChromeDevTools/Protocol/Chrome/CSS/GetInlineStylesForNodeCommandResponse.cs
index dba8411..99b0f59 100644
--- a/source/ChromeDevTools/Protocol/Chrome/CSS/GetInlineStylesForNodeCommandResponse.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/CSS/GetInlineStylesForNodeCommandResponse.cs
@@ -14,10 +14,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.CSS
 		/// <summary>
 		/// Gets or sets Inline style for the specified DOM node.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public CSSStyle InlineStyle { get; set; }
 		/// <summary>
 		/// Gets or sets Attribute-defined element style (e.g. resulting from "width=20 height=100%").
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public CSSStyle AttributesStyle { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/CSS/GetMatchedStylesForNodeCommand.cs b/source/ChromeDevTools/Protocol/Chrome/CSS/GetMatchedStylesForNodeCommand.cs
index 383b01f..315b825 100644
--- a/source/ChromeDevTools/Protocol/Chrome/CSS/GetMatchedStylesForNodeCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/CSS/GetMatchedStylesForNodeCommand.cs
@@ -18,10 +18,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.CSS
 		/// <summary>
 		/// Gets or sets Whether to exclude pseudo styles (default: false).
 		/// </summary>
-		public bool ExcludePseudo { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? ExcludePseudo { get; set; }
 		/// <summary>
 		/// Gets or sets Whether to exclude inherited styles (default: false).
 		/// </summary>
-		public bool ExcludeInherited { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? ExcludeInherited { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/CSS/GetMatchedStylesForNodeCommandResponse.cs b/source/ChromeDevTools/Protocol/Chrome/CSS/GetMatchedStylesForNodeCommandResponse.cs
index 3b0c3a7..be70f68 100644
--- a/source/ChromeDevTools/Protocol/Chrome/CSS/GetMatchedStylesForNodeCommandResponse.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/CSS/GetMatchedStylesForNodeCommandResponse.cs
@@ -14,14 +14,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.CSS
 		/// <summary>
 		/// Gets or sets CSS rules matching this node, from all applicable stylesheets.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RuleMatch[] MatchedCSSRules { get; set; }
 		/// <summary>
 		/// Gets or sets Pseudo style matches for this node.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public PseudoIdMatches[] PseudoElements { get; set; }
 		/// <summary>
 		/// Gets or sets A chain of inherited styles (from the immediate node parent up to the DOM tree root).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public InheritedStyleEntry[] Inherited { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/CSS/InheritedStyleEntry.cs b/source/ChromeDevTools/Protocol/Chrome/CSS/InheritedStyleEntry.cs
index 1fd4251..ef9cbf0 100644
--- a/source/ChromeDevTools/Protocol/Chrome/CSS/InheritedStyleEntry.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/CSS/InheritedStyleEntry.cs
@@ -13,6 +13,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.CSS
 		/// <summary>
 		/// Gets or sets The ancestor node's inline style, if any, in the style inheritance chain.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public CSSStyle InlineStyle { get; set; }
 		/// <summary>
 		/// Gets or sets Matches of CSS rules matching the ancestor node in the style inheritance chain.
diff --git a/source/ChromeDevTools/Protocol/Chrome/CSS/MediaQueryExpression.cs b/source/ChromeDevTools/Protocol/Chrome/CSS/MediaQueryExpression.cs
index bad4cf7..29b8b83 100644
--- a/source/ChromeDevTools/Protocol/Chrome/CSS/MediaQueryExpression.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/CSS/MediaQueryExpression.cs
@@ -25,10 +25,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.CSS
 		/// <summary>
 		/// Gets or sets The associated range of the value text in the enclosing stylesheet (if available).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public SourceRange ValueRange { get; set; }
 		/// <summary>
 		/// Gets or sets Computed length of media query expression (if applicable).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double ComputedLength { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/CSS/MediaQueryResultChangedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/CSS/MediaQueryResultChangedEvent.cs
index dfeab50..11287ed 100644
--- a/source/ChromeDevTools/Protocol/Chrome/CSS/MediaQueryResultChangedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/CSS/MediaQueryResultChangedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.CSS
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/CSS/Selector.cs b/source/ChromeDevTools/Protocol/Chrome/CSS/Selector.cs
index e5a7aec..3abfb80 100644
--- a/source/ChromeDevTools/Protocol/Chrome/CSS/Selector.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/CSS/Selector.cs
@@ -17,6 +17,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.CSS
 		/// <summary>
 		/// Gets or sets Selector range in the underlying resource (if available).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public SourceRange Range { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/CSS/StyleSheetAddedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/CSS/StyleSheetAddedEvent.cs
index 22f4279..f767086 100644
--- a/source/ChromeDevTools/Protocol/Chrome/CSS/StyleSheetAddedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/CSS/StyleSheetAddedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.CSS
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/CSS/StyleSheetChangedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/CSS/StyleSheetChangedEvent.cs
index f4779a8..860170a 100644
--- a/source/ChromeDevTools/Protocol/Chrome/CSS/StyleSheetChangedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/CSS/StyleSheetChangedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.CSS
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/CSS/StyleSheetRemovedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/CSS/StyleSheetRemovedEvent.cs
index f1e1ae8..08a5a13 100644
--- a/source/ChromeDevTools/Protocol/Chrome/CSS/StyleSheetRemovedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/CSS/StyleSheetRemovedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.CSS
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Canvas/Call.cs b/source/ChromeDevTools/Protocol/Chrome/Canvas/Call.cs
index e1c2f23..71d72db 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Canvas/Call.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Canvas/Call.cs
@@ -17,42 +17,52 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Canvas
 		/// <summary>
 		/// Gets or sets FunctionName
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string FunctionName { get; set; }
 		/// <summary>
 		/// Gets or sets Arguments
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public CallArgument[] Arguments { get; set; }
 		/// <summary>
 		/// Gets or sets Result
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public CallArgument Result { get; set; }
 		/// <summary>
 		/// Gets or sets IsDrawingCall
 		/// </summary>
-		public bool IsDrawingCall { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IsDrawingCall { get; set; }
 		/// <summary>
 		/// Gets or sets IsFrameEndCall
 		/// </summary>
-		public bool IsFrameEndCall { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IsFrameEndCall { get; set; }
 		/// <summary>
 		/// Gets or sets Property
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Property { get; set; }
 		/// <summary>
 		/// Gets or sets Value
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public CallArgument Value { get; set; }
 		/// <summary>
 		/// Gets or sets SourceURL
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string SourceURL { get; set; }
 		/// <summary>
 		/// Gets or sets LineNumber
 		/// </summary>
-		public long LineNumber { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? LineNumber { get; set; }
 		/// <summary>
 		/// Gets or sets ColumnNumber
 		/// </summary>
-		public long ColumnNumber { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? ColumnNumber { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Canvas/CallArgument.cs b/source/ChromeDevTools/Protocol/Chrome/Canvas/CallArgument.cs
index ed77cf8..4275208 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Canvas/CallArgument.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Canvas/CallArgument.cs
@@ -17,22 +17,27 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Canvas
 		/// <summary>
 		/// Gets or sets Enum name, if any, that stands for the value (for example, a WebGL enum name).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string EnumName { get; set; }
 		/// <summary>
 		/// Gets or sets Resource identifier. Specified for <code>Resource</code> objects only.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ResourceId { get; set; }
 		/// <summary>
 		/// Gets or sets Object type. Specified for non <code>Resource</code> objects only.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Type { get; set; }
 		/// <summary>
 		/// Gets or sets Object subtype hint. Specified for <code>object</code> type values only.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Subtype { get; set; }
 		/// <summary>
 		/// Gets or sets The <code>RemoteObject</code>, if requested.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Runtime.RemoteObject RemoteObject { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Canvas/CaptureFrameCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Canvas/CaptureFrameCommand.cs
index 4672770..6ffc545 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Canvas/CaptureFrameCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Canvas/CaptureFrameCommand.cs
@@ -14,6 +14,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Canvas
 		/// <summary>
 		/// Gets or sets Identifier of the frame containing document whose canvases are to be captured. If omitted, main frame is assumed.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string FrameId { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Canvas/ContextCreatedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Canvas/ContextCreatedEvent.cs
index 88f0ac5..388fcf8 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Canvas/ContextCreatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Canvas/ContextCreatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Canvas
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Canvas/EvaluateTraceLogCallArgumentCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Canvas/EvaluateTraceLogCallArgumentCommand.cs
index 573b7da..0e96090 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Canvas/EvaluateTraceLogCallArgumentCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Canvas/EvaluateTraceLogCallArgumentCommand.cs
@@ -26,6 +26,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Canvas
 		/// <summary>
 		/// Gets or sets String object group name to put result into (allows rapid releasing resulting object handles using <code>Runtime.releaseObjectGroup</code>).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ObjectGroup { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Canvas/EvaluateTraceLogCallArgumentCommandResponse.cs b/source/ChromeDevTools/Protocol/Chrome/Canvas/EvaluateTraceLogCallArgumentCommandResponse.cs
index c46b108..da274cc 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Canvas/EvaluateTraceLogCallArgumentCommandResponse.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Canvas/EvaluateTraceLogCallArgumentCommandResponse.cs
@@ -14,10 +14,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Canvas
 		/// <summary>
 		/// Gets or sets Object wrapper for the evaluation result.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Runtime.RemoteObject Result { get; set; }
 		/// <summary>
 		/// Gets or sets State of the <code>Resource</code> object.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public ResourceState ResourceState { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Canvas/GetTraceLogCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Canvas/GetTraceLogCommand.cs
index 47f43e4..de96338 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Canvas/GetTraceLogCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Canvas/GetTraceLogCommand.cs
@@ -15,10 +15,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Canvas
 		/// <summary>
 		/// Gets or sets StartOffset
 		/// </summary>
-		public long StartOffset { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? StartOffset { get; set; }
 		/// <summary>
 		/// Gets or sets MaxLength
 		/// </summary>
-		public long MaxLength { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? MaxLength { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Canvas/ResourceState.cs b/source/ChromeDevTools/Protocol/Chrome/Canvas/ResourceState.cs
index 63962c6..37d4589 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Canvas/ResourceState.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Canvas/ResourceState.cs
@@ -21,10 +21,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Canvas
 		/// <summary>
 		/// Gets or sets Describes current <code>Resource</code> state.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public ResourceStateDescriptor[] Descriptors { get; set; }
 		/// <summary>
 		/// Gets or sets Screenshot image data URL.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ImageURL { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Canvas/ResourceStateDescriptor.cs b/source/ChromeDevTools/Protocol/Chrome/Canvas/ResourceStateDescriptor.cs
index fa47bcd..7b9ca5c 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Canvas/ResourceStateDescriptor.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Canvas/ResourceStateDescriptor.cs
@@ -17,18 +17,22 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Canvas
 		/// <summary>
 		/// Gets or sets String representation of the enum value, if <code>name</code> stands for an enum.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string EnumValueForName { get; set; }
 		/// <summary>
 		/// Gets or sets The value associated with the particular state.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public CallArgument Value { get; set; }
 		/// <summary>
 		/// Gets or sets Array of values associated with the particular state. Either <code>value</code> or <code>values</code> will be specified.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public ResourceStateDescriptor[] Values { get; set; }
 		/// <summary>
 		/// Gets or sets True iff the given <code>values</code> items stand for an array rather than a list of grouped states.
 		/// </summary>
-		public bool IsArray { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IsArray { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Canvas/StartCapturingCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Canvas/StartCapturingCommand.cs
index 1074bef..f898829 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Canvas/StartCapturingCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Canvas/StartCapturingCommand.cs
@@ -14,6 +14,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Canvas
 		/// <summary>
 		/// Gets or sets Identifier of the frame containing document whose canvases are to be captured. If omitted, main frame is assumed.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string FrameId { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Canvas/TraceLogsRemovedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Canvas/TraceLogsRemovedEvent.cs
index 4b79749..be7e727 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Canvas/TraceLogsRemovedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Canvas/TraceLogsRemovedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Canvas
 {
@@ -12,10 +12,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Canvas
 		/// <summary>
 		/// Gets or sets If given, trace logs from the given frame were removed.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string FrameId { get; set; }
 		/// <summary>
 		/// Gets or sets If given, trace log with the given ID was removed.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string TraceLogId { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Console/AsyncStackTrace.cs b/source/ChromeDevTools/Protocol/Chrome/Console/AsyncStackTrace.cs
index 3067ba1..6bc8dbc 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Console/AsyncStackTrace.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Console/AsyncStackTrace.cs
@@ -17,6 +17,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Console
 		/// <summary>
 		/// Gets or sets String label of this stack trace. For async traces this may be a name of the function that initiated the async call.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Description { get; set; }
 		/// <summary>
 		/// Gets or sets Next asynchronous stack trace, if any.
diff --git a/source/ChromeDevTools/Protocol/Chrome/Console/ConsoleMessage.cs b/source/ChromeDevTools/Protocol/Chrome/Console/ConsoleMessage.cs
index eb7f2f2..4ea7548 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Console/ConsoleMessage.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Console/ConsoleMessage.cs
@@ -25,42 +25,52 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Console
 		/// <summary>
 		/// Gets or sets Console message type.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Type { get; set; }
 		/// <summary>
 		/// Gets or sets Script ID of the message origin.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ScriptId { get; set; }
 		/// <summary>
 		/// Gets or sets URL of the message origin.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Url { get; set; }
 		/// <summary>
 		/// Gets or sets Line number in the resource that generated this message.
 		/// </summary>
-		public long Line { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? Line { get; set; }
 		/// <summary>
 		/// Gets or sets Column number in the resource that generated this message.
 		/// </summary>
-		public long Column { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? Column { get; set; }
 		/// <summary>
 		/// Gets or sets Repeat count for repeated messages.
 		/// </summary>
-		public long RepeatCount { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? RepeatCount { get; set; }
 		/// <summary>
 		/// Gets or sets Message parameters in case of the formatted message.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Runtime.RemoteObject[] Parameters { get; set; }
 		/// <summary>
 		/// Gets or sets JavaScript stack trace for assertions and error messages.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public CallFrame[] StackTrace { get; set; }
 		/// <summary>
 		/// Gets or sets Asynchronous JavaScript stack trace that preceded this message, if available.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public AsyncStackTrace AsyncStackTrace { get; set; }
 		/// <summary>
 		/// Gets or sets Identifier of the network request associated with this message.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string NetworkRequestId { get; set; }
 		/// <summary>
 		/// Gets or sets Timestamp, when this message was fired.
@@ -69,6 +79,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Console
 		/// <summary>
 		/// Gets or sets Identifier of the context where this message was created
 		/// </summary>
-		public long ExecutionContextId { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? ExecutionContextId { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Console/MessageAddedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Console/MessageAddedEvent.cs
index a0fc6a4..441134f 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Console/MessageAddedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Console/MessageAddedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Console
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Console/MessageRepeatCountUpdatedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Console/MessageRepeatCountUpdatedEvent.cs
index 99bf5f7..e608bce 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Console/MessageRepeatCountUpdatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Console/MessageRepeatCountUpdatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Console
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Console/MessagesClearedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Console/MessagesClearedEvent.cs
index b84123f..3116648 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Console/MessagesClearedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Console/MessagesClearedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Console
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/AttributeModifiedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/AttributeModifiedEvent.cs
index b3ac444..2f8e18e 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/AttributeModifiedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/AttributeModifiedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/AttributeRemovedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/AttributeRemovedEvent.cs
index dd46daa..d825216 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/AttributeRemovedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/AttributeRemovedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/BoxModel.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/BoxModel.cs
index cb403a7..9d36b92 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/BoxModel.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/BoxModel.cs
@@ -37,6 +37,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 		/// <summary>
 		/// Gets or sets Shape outside coordinates
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public ShapeOutsideInfo ShapeOutside { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/CharacterDataModifiedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/CharacterDataModifiedEvent.cs
index 705119a..603beea 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/CharacterDataModifiedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/CharacterDataModifiedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/ChildNodeCountUpdatedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/ChildNodeCountUpdatedEvent.cs
index 0b65010..3bea04f 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/ChildNodeCountUpdatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/ChildNodeCountUpdatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/ChildNodeInsertedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/ChildNodeInsertedEvent.cs
index 7bbafc6..4eba2f1 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/ChildNodeInsertedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/ChildNodeInsertedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/ChildNodeRemovedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/ChildNodeRemovedEvent.cs
index 820b892..b5b4e68 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/ChildNodeRemovedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/ChildNodeRemovedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/CopyToCommand.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/CopyToCommand.cs
index e15460b..d9857fd 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/CopyToCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/CopyToCommand.cs
@@ -22,6 +22,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 		/// <summary>
 		/// Gets or sets Drop the copy before this node (if absent, the copy becomes the last child of <code>targetNodeId</code>).
 		/// </summary>
-		public long InsertBeforeNodeId { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? InsertBeforeNodeId { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/DistributedNodesUpdatedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/DistributedNodesUpdatedEvent.cs
index 24de6a1..ff102a9 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/DistributedNodesUpdatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/DistributedNodesUpdatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/DocumentUpdatedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/DocumentUpdatedEvent.cs
index e879562..725d0a4 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/DocumentUpdatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/DocumentUpdatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/EventListener.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/EventListener.cs
index 1f6bda1..83ddbf5 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/EventListener.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/EventListener.cs
@@ -33,6 +33,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 		/// <summary>
 		/// Gets or sets Event handler function value.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Runtime.RemoteObject Handler { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/GetEventListenersForNodeCommand.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/GetEventListenersForNodeCommand.cs
index b60e723..b717a8a 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/GetEventListenersForNodeCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/GetEventListenersForNodeCommand.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 		/// <summary>
 		/// Gets or sets Symbolic group name for handler value. Handler value is not returned without this parameter specified.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ObjectGroup { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/HighlightConfig.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/HighlightConfig.cs
index b2457ad..3392e2a 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/HighlightConfig.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/HighlightConfig.cs
@@ -13,42 +13,52 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 		/// <summary>
 		/// Gets or sets Whether the node info tooltip should be shown (default: false).
 		/// </summary>
-		public bool ShowInfo { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? ShowInfo { get; set; }
 		/// <summary>
 		/// Gets or sets Whether the rulers should be shown (default: false).
 		/// </summary>
-		public bool ShowRulers { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? ShowRulers { get; set; }
 		/// <summary>
 		/// Gets or sets Whether the extension lines from node to the rulers should be shown (default: false).
 		/// </summary>
-		public bool ShowExtensionLines { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? ShowExtensionLines { get; set; }
 		/// <summary>
 		/// Gets or sets The content box highlight fill color (default: transparent).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RGBA ContentColor { get; set; }
 		/// <summary>
 		/// Gets or sets The padding highlight fill color (default: transparent).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RGBA PaddingColor { get; set; }
 		/// <summary>
 		/// Gets or sets The border highlight fill color (default: transparent).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RGBA BorderColor { get; set; }
 		/// <summary>
 		/// Gets or sets The margin highlight fill color (default: transparent).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RGBA MarginColor { get; set; }
 		/// <summary>
 		/// Gets or sets The event target element highlight fill color (default: transparent).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RGBA EventTargetColor { get; set; }
 		/// <summary>
 		/// Gets or sets The shape outside fill color (default: transparent).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RGBA ShapeColor { get; set; }
 		/// <summary>
 		/// Gets or sets The shape margin fill color (default: transparent).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RGBA ShapeMarginColor { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/HighlightFrameCommand.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/HighlightFrameCommand.cs
index a6eb81c..43a7129 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/HighlightFrameCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/HighlightFrameCommand.cs
@@ -18,10 +18,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 		/// <summary>
 		/// Gets or sets The content box highlight fill color (default: transparent).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RGBA ContentColor { get; set; }
 		/// <summary>
 		/// Gets or sets The content box highlight outline color (default: transparent).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RGBA ContentOutlineColor { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/HighlightNodeCommand.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/HighlightNodeCommand.cs
index 96a71a8..36955d1 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/HighlightNodeCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/HighlightNodeCommand.cs
@@ -18,14 +18,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 		/// <summary>
 		/// Gets or sets Identifier of the node to highlight.
 		/// </summary>
-		public long NodeId { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? NodeId { get; set; }
 		/// <summary>
 		/// Gets or sets Identifier of the backend node to highlight.
 		/// </summary>
-		public long BackendNodeId { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? BackendNodeId { get; set; }
 		/// <summary>
 		/// Gets or sets JavaScript object id of the node to be highlighted.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ObjectId { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/HighlightQuadCommand.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/HighlightQuadCommand.cs
index 86c3c0d..88252e6 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/HighlightQuadCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/HighlightQuadCommand.cs
@@ -18,10 +18,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 		/// <summary>
 		/// Gets or sets The highlight fill color (default: transparent).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RGBA Color { get; set; }
 		/// <summary>
 		/// Gets or sets The highlight outline color (default: transparent).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RGBA OutlineColor { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/HighlightRectCommand.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/HighlightRectCommand.cs
index cd6a963..da0a0c0 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/HighlightRectCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/HighlightRectCommand.cs
@@ -30,10 +30,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 		/// <summary>
 		/// Gets or sets The highlight fill color (default: transparent).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RGBA Color { get; set; }
 		/// <summary>
 		/// Gets or sets The highlight outline color (default: transparent).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RGBA OutlineColor { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/InlineStyleInvalidatedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/InlineStyleInvalidatedEvent.cs
index 979c302..2d11e71 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/InlineStyleInvalidatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/InlineStyleInvalidatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/InspectNodeRequestedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/InspectNodeRequestedEvent.cs
index 88a2c01..9965441 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/InspectNodeRequestedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/InspectNodeRequestedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/MoveToCommand.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/MoveToCommand.cs
index 2c3e6a4..4f30c31 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/MoveToCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/MoveToCommand.cs
@@ -22,6 +22,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 		/// <summary>
 		/// Gets or sets Drop node before this one (if absent, the moved node becomes the last child of <code>targetNodeId</code>).
 		/// </summary>
-		public long InsertBeforeNodeId { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? InsertBeforeNodeId { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/Node.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/Node.cs
index 8475ce8..99bf6fb 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/Node.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/Node.cs
@@ -33,82 +33,102 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 		/// <summary>
 		/// Gets or sets Child count for <code>Container</code> nodes.
 		/// </summary>
-		public long ChildNodeCount { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? ChildNodeCount { get; set; }
 		/// <summary>
 		/// Gets or sets Child nodes of this node when requested with children.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Node[] Children { get; set; }
 		/// <summary>
 		/// Gets or sets Attributes of the <code>Element</code> node in the form of flat array <code>[name1, value1, name2, value2]</code>.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string[] Attributes { get; set; }
 		/// <summary>
 		/// Gets or sets Document URL that <code>Document</code> or <code>FrameOwner</code> node points to.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string DocumentURL { get; set; }
 		/// <summary>
 		/// Gets or sets Base URL that <code>Document</code> or <code>FrameOwner</code> node uses for URL completion.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string BaseURL { get; set; }
 		/// <summary>
 		/// Gets or sets <code>DocumentType</code>'s publicId.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string PublicId { get; set; }
 		/// <summary>
 		/// Gets or sets <code>DocumentType</code>'s systemId.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string SystemId { get; set; }
 		/// <summary>
 		/// Gets or sets <code>DocumentType</code>'s internalSubset.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string InternalSubset { get; set; }
 		/// <summary>
 		/// Gets or sets <code>Document</code>'s XML version in case of XML documents.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string XmlVersion { get; set; }
 		/// <summary>
 		/// Gets or sets <code>Attr</code>'s name.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Name { get; set; }
 		/// <summary>
 		/// Gets or sets <code>Attr</code>'s value.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Value { get; set; }
 		/// <summary>
 		/// Gets or sets Pseudo element type for this node.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public PseudoType PseudoType { get; set; }
 		/// <summary>
 		/// Gets or sets Shadow root type.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public ShadowRootType ShadowRootType { get; set; }
 		/// <summary>
 		/// Gets or sets Frame ID for frame owner elements.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string FrameId { get; set; }
 		/// <summary>
 		/// Gets or sets Content document for frame owner elements.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Node ContentDocument { get; set; }
 		/// <summary>
 		/// Gets or sets Shadow root list for given element host.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Node[] ShadowRoots { get; set; }
 		/// <summary>
 		/// Gets or sets Content document fragment for template elements.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Node TemplateContent { get; set; }
 		/// <summary>
 		/// Gets or sets Pseudo elements associated with this node.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Node[] PseudoElements { get; set; }
 		/// <summary>
 		/// Gets or sets Import document for the HTMLImport links.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Node ImportedDocument { get; set; }
 		/// <summary>
 		/// Gets or sets Distributed nodes for given insertion point.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public BackendNode[] DistributedNodes { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/PerformSearchCommand.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/PerformSearchCommand.cs
index 9aa34b8..8462063 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/PerformSearchCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/PerformSearchCommand.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 		/// <summary>
 		/// Gets or sets True to search in user agent shadow DOM.
 		/// </summary>
-		public bool IncludeUserAgentShadowDOM { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IncludeUserAgentShadowDOM { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/PseudoElementAddedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/PseudoElementAddedEvent.cs
index 8014eec..aeb498a 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/PseudoElementAddedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/PseudoElementAddedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/PseudoElementRemovedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/PseudoElementRemovedEvent.cs
index 350e442..7ea305e 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/PseudoElementRemovedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/PseudoElementRemovedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/RGBA.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/RGBA.cs
index 144ed34..efa9559 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/RGBA.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/RGBA.cs
@@ -25,6 +25,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 		/// <summary>
 		/// Gets or sets The alpha component, in the [0-1] range (default: 1).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double A { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/RequestChildNodesCommand.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/RequestChildNodesCommand.cs
index c002aaa..9d526fa 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/RequestChildNodesCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/RequestChildNodesCommand.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 		/// <summary>
 		/// Gets or sets The maximum depth at which children should be retrieved, defaults to 1. Use -1 for the entire subtree or provide an integer larger than 0.
 		/// </summary>
-		public long Depth { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? Depth { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/ResolveNodeCommand.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/ResolveNodeCommand.cs
index ce1e633..830c5a0 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/ResolveNodeCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/ResolveNodeCommand.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 		/// <summary>
 		/// Gets or sets Symbolic group name that can be used to release multiple objects.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ObjectGroup { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/SetAttributesAsTextCommand.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/SetAttributesAsTextCommand.cs
index 9a71ea7..ab329a0 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/SetAttributesAsTextCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/SetAttributesAsTextCommand.cs
@@ -22,6 +22,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 		/// <summary>
 		/// Gets or sets Attribute name to replace with new attributes derived from text in case text parsed successfully.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Name { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/SetChildNodesEvent.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/SetChildNodesEvent.cs
index 82b0657..8201219 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/SetChildNodesEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/SetChildNodesEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/SetInspectModeEnabledCommand.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/SetInspectModeEnabledCommand.cs
index 6f16acf..adeb99e 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/SetInspectModeEnabledCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/SetInspectModeEnabledCommand.cs
@@ -18,10 +18,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 		/// <summary>
 		/// Gets or sets True to enable inspection mode for user agent shadow DOM.
 		/// </summary>
-		public bool InspectUAShadowDOM { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? InspectUAShadowDOM { get; set; }
 		/// <summary>
 		/// Gets or sets A descriptor for the highlight appearance of hovered-over nodes. May be omitted if <code>enabled == false</code>.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public HighlightConfig HighlightConfig { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/ShadowRootPoppedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/ShadowRootPoppedEvent.cs
index f6dad4b..4e3e3ca 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/ShadowRootPoppedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/ShadowRootPoppedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOM/ShadowRootPushedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/DOM/ShadowRootPushedEvent.cs
index dea8f12..5532746 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOM/ShadowRootPushedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOM/ShadowRootPushedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOM
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOMDebugger/RemoveEventListenerBreakpointCommand.cs b/source/ChromeDevTools/Protocol/Chrome/DOMDebugger/RemoveEventListenerBreakpointCommand.cs
index 5e9ed7d..9007ca5 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOMDebugger/RemoveEventListenerBreakpointCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOMDebugger/RemoveEventListenerBreakpointCommand.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOMDebugger
 		/// <summary>
 		/// Gets or sets EventTarget interface name.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string TargetName { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOMDebugger/SetEventListenerBreakpointCommand.cs b/source/ChromeDevTools/Protocol/Chrome/DOMDebugger/SetEventListenerBreakpointCommand.cs
index 1f5c97d..13e2f38 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOMDebugger/SetEventListenerBreakpointCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOMDebugger/SetEventListenerBreakpointCommand.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOMDebugger
 		/// <summary>
 		/// Gets or sets EventTarget interface name to stop on. If equal to <code>"*"</code> or not provided, will stop on any EventTarget.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string TargetName { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOMStorage/DomStorageItemAddedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/DOMStorage/DomStorageItemAddedEvent.cs
index ddb0b4e..439e2e5 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOMStorage/DomStorageItemAddedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOMStorage/DomStorageItemAddedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOMStorage
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOMStorage/DomStorageItemRemovedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/DOMStorage/DomStorageItemRemovedEvent.cs
index 0610cdc..8871a19 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOMStorage/DomStorageItemRemovedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOMStorage/DomStorageItemRemovedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOMStorage
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOMStorage/DomStorageItemUpdatedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/DOMStorage/DomStorageItemUpdatedEvent.cs
index e3321ab..406a402 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOMStorage/DomStorageItemUpdatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOMStorage/DomStorageItemUpdatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOMStorage
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/DOMStorage/DomStorageItemsClearedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/DOMStorage/DomStorageItemsClearedEvent.cs
index 5177568..75835d4 100644
--- a/source/ChromeDevTools/Protocol/Chrome/DOMStorage/DomStorageItemsClearedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/DOMStorage/DomStorageItemsClearedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.DOMStorage
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Database/AddDatabaseEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Database/AddDatabaseEvent.cs
index c735241..0855a4f 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Database/AddDatabaseEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Database/AddDatabaseEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Database
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Database/ExecuteSQLCommandResponse.cs b/source/ChromeDevTools/Protocol/Chrome/Database/ExecuteSQLCommandResponse.cs
index 0db6c57..e00d92a 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Database/ExecuteSQLCommandResponse.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Database/ExecuteSQLCommandResponse.cs
@@ -11,14 +11,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Database
 		/// <summary>
 		/// Gets or sets ColumnNames
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string[] ColumnNames { get; set; }
 		/// <summary>
 		/// Gets or sets Values
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public object[] Values { get; set; }
 		/// <summary>
 		/// Gets or sets SqlError
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Error SqlError { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/AsyncOperation.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/AsyncOperation.cs
index 0a4f240..95db90d 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/AsyncOperation.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/AsyncOperation.cs
@@ -21,10 +21,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets Stack trace where async operation was scheduled.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Console.CallFrame[] StackTrace { get; set; }
 		/// <summary>
 		/// Gets or sets Asynchronous stack trace where async operation was scheduled, if available.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Console.AsyncStackTrace AsyncStackTrace { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/AsyncOperationCompletedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/AsyncOperationCompletedEvent.cs
index 5850542..5c4c61d 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/AsyncOperationCompletedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/AsyncOperationCompletedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/AsyncOperationStartedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/AsyncOperationStartedEvent.cs
index 4884a51..d108ab4 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/AsyncOperationStartedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/AsyncOperationStartedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/BreakpointResolvedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/BreakpointResolvedEvent.cs
index 323d71d..96268e7 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/BreakpointResolvedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/BreakpointResolvedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/CallFrame.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/CallFrame.cs
index e87e2f5..687fb1c 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/CallFrame.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/CallFrame.cs
@@ -21,6 +21,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets Location in the source code.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Location FunctionLocation { get; set; }
 		/// <summary>
 		/// Gets or sets Location in the source code.
@@ -37,6 +38,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets The value being returned, if the function is at return point.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Runtime.RemoteObject ReturnValue { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/CollectionEntry.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/CollectionEntry.cs
index 0747675..85975e3 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/CollectionEntry.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/CollectionEntry.cs
@@ -13,6 +13,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets Entry key of a map-like collection, otherwise not provided.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Runtime.RemoteObject Key { get; set; }
 		/// <summary>
 		/// Gets or sets Entry value.
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/CompileScriptCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/CompileScriptCommand.cs
index a22f031..be2da0a 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/CompileScriptCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/CompileScriptCommand.cs
@@ -26,6 +26,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets Specifies in which isolated context to perform script run. Each content script lives in an isolated context and this parameter may be used to specify one of those contexts. If the parameter is omitted or 0 the evaluation will be performed in the context of the inspected page.
 		/// </summary>
-		public long ExecutionContextId { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? ExecutionContextId { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/CompileScriptCommandResponse.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/CompileScriptCommandResponse.cs
index 686164e..6c3e1be 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/CompileScriptCommandResponse.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/CompileScriptCommandResponse.cs
@@ -14,10 +14,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets Id of the script.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ScriptId { get; set; }
 		/// <summary>
 		/// Gets or sets Exception details.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public ExceptionDetails ExceptionDetails { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/ContinueToLocationCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/ContinueToLocationCommand.cs
index c41368b..642c31f 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/ContinueToLocationCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/ContinueToLocationCommand.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets Allows breakpoints at the intemediate positions inside statements.
 		/// </summary>
-		public bool InterstatementLocation { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? InterstatementLocation { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/EnablePromiseTrackerCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/EnablePromiseTrackerCommand.cs
index 4c473d4..9fa809a 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/EnablePromiseTrackerCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/EnablePromiseTrackerCommand.cs
@@ -14,6 +14,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets Whether to capture stack traces for promise creation and settlement events (default: false).
 		/// </summary>
-		public bool CaptureStacks { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? CaptureStacks { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/EvaluateOnCallFrameCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/EvaluateOnCallFrameCommand.cs
index 5627af5..4f23eb2 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/EvaluateOnCallFrameCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/EvaluateOnCallFrameCommand.cs
@@ -22,22 +22,27 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets String object group name to put result into (allows rapid releasing resulting object handles using <code>releaseObjectGroup</code>).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ObjectGroup { get; set; }
 		/// <summary>
 		/// Gets or sets Specifies whether command line API should be available to the evaluated expression, defaults to false.
 		/// </summary>
-		public bool IncludeCommandLineAPI { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IncludeCommandLineAPI { get; set; }
 		/// <summary>
 		/// Gets or sets Specifies whether evaluation should stop on exceptions and mute console. Overrides setPauseOnException state.
 		/// </summary>
-		public bool DoNotPauseOnExceptionsAndMuteConsole { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? DoNotPauseOnExceptionsAndMuteConsole { get; set; }
 		/// <summary>
 		/// Gets or sets Whether the result is expected to be a JSON object that should be sent by value.
 		/// </summary>
-		public bool ReturnByValue { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? ReturnByValue { get; set; }
 		/// <summary>
 		/// Gets or sets Whether preview should be generated for the result.
 		/// </summary>
-		public bool GeneratePreview { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? GeneratePreview { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/EvaluateOnCallFrameCommandResponse.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/EvaluateOnCallFrameCommandResponse.cs
index d4b0d87..7f7f766 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/EvaluateOnCallFrameCommandResponse.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/EvaluateOnCallFrameCommandResponse.cs
@@ -18,10 +18,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets True if the result was thrown during the evaluation.
 		/// </summary>
-		public bool WasThrown { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? WasThrown { get; set; }
 		/// <summary>
 		/// Gets or sets Exception details.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public ExceptionDetails ExceptionDetails { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/ExceptionDetails.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/ExceptionDetails.cs
index 5fedada..b481d2a 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/ExceptionDetails.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/ExceptionDetails.cs
@@ -17,22 +17,27 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets URL of the message origin.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Url { get; set; }
 		/// <summary>
 		/// Gets or sets Script ID of the message origin.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ScriptId { get; set; }
 		/// <summary>
 		/// Gets or sets Line number in the resource that generated this message.
 		/// </summary>
-		public long Line { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? Line { get; set; }
 		/// <summary>
 		/// Gets or sets Column number in the resource that generated this message.
 		/// </summary>
-		public long Column { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? Column { get; set; }
 		/// <summary>
 		/// Gets or sets JavaScript stack trace for assertions and error messages.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Console.CallFrame[] StackTrace { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/FunctionDetails.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/FunctionDetails.cs
index 94005bc..eb6b876 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/FunctionDetails.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/FunctionDetails.cs
@@ -13,6 +13,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets Location of the function, none for native functions.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Location Location { get; set; }
 		/// <summary>
 		/// Gets or sets Name of the function.
@@ -25,6 +26,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets Scope chain for this closure.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Scope[] ScopeChain { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/GeneratorObjectDetails.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/GeneratorObjectDetails.cs
index f7f468e..7e7f00e 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/GeneratorObjectDetails.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/GeneratorObjectDetails.cs
@@ -25,6 +25,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets If suspended, location where generator function was suspended (e.g. location of the last 'yield'). Otherwise, location of the generator function.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Location Location { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/GetBacktraceCommandResponse.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/GetBacktraceCommandResponse.cs
index d6429f7..56d99cb 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/GetBacktraceCommandResponse.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/GetBacktraceCommandResponse.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets Async stack trace, if any.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public StackTrace AsyncStackTrace { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/GetPromiseByIdCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/GetPromiseByIdCommand.cs
index 0ec1cde..06135f8 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/GetPromiseByIdCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/GetPromiseByIdCommand.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets Symbolic group name that can be used to release multiple objects.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ObjectGroup { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/GetStepInPositionsCommandResponse.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/GetStepInPositionsCommandResponse.cs
index d3ce155..80d6719 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/GetStepInPositionsCommandResponse.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/GetStepInPositionsCommandResponse.cs
@@ -14,6 +14,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets experimental
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Location[] StepInPositions { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/GlobalObjectClearedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/GlobalObjectClearedEvent.cs
index bd97c24..25a4e37 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/GlobalObjectClearedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/GlobalObjectClearedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/Location.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/Location.cs
index 7fa46bd..4445355 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/Location.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/Location.cs
@@ -21,6 +21,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets Column number in the script (0-based).
 		/// </summary>
-		public long ColumnNumber { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? ColumnNumber { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/PausedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/PausedEvent.cs
index 981b471..8f17fb5 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/PausedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/PausedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 {
@@ -20,14 +20,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets Object containing break-specific auxiliary properties.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public object Data { get; set; }
 		/// <summary>
 		/// Gets or sets Hit breakpoints IDs
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string[] HitBreakpoints { get; set; }
 		/// <summary>
 		/// Gets or sets Async stack trace, if any.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public StackTrace AsyncStackTrace { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/PromiseDetails.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/PromiseDetails.cs
index 5416a8f..311ccf3 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/PromiseDetails.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/PromiseDetails.cs
@@ -21,34 +21,42 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets Id of the parent promise.
 		/// </summary>
-		public long ParentId { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? ParentId { get; set; }
 		/// <summary>
 		/// Gets or sets Top call frame on promise creation.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Console.CallFrame CallFrame { get; set; }
 		/// <summary>
 		/// Gets or sets Creation time of the promise.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double CreationTime { get; set; }
 		/// <summary>
 		/// Gets or sets Settlement time of the promise.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double SettlementTime { get; set; }
 		/// <summary>
 		/// Gets or sets JavaScript stack trace on promise creation.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Console.CallFrame[] CreationStack { get; set; }
 		/// <summary>
 		/// Gets or sets JavaScript asynchronous stack trace on promise creation, if available.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Console.AsyncStackTrace AsyncCreationStack { get; set; }
 		/// <summary>
 		/// Gets or sets JavaScript stack trace on promise settlement.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Console.CallFrame[] SettlementStack { get; set; }
 		/// <summary>
 		/// Gets or sets JavaScript asynchronous stack trace on promise settlement, if available.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Console.AsyncStackTrace AsyncSettlementStack { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/PromiseUpdatedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/PromiseUpdatedEvent.cs
index 2f78e1d..6bb1d8f 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/PromiseUpdatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/PromiseUpdatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/RestartFrameCommandResponse.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/RestartFrameCommandResponse.cs
index 22be5f9..3df7b7b 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/RestartFrameCommandResponse.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/RestartFrameCommandResponse.cs
@@ -22,6 +22,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets Async stack trace, if any.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public StackTrace AsyncStackTrace { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/ResumedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/ResumedEvent.cs
index 1f4d7ae..4036ade 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/ResumedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/ResumedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/RunScriptCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/RunScriptCommand.cs
index c7019ce..5c786b7 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/RunScriptCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/RunScriptCommand.cs
@@ -18,14 +18,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets Specifies in which isolated context to perform script run. Each content script lives in an isolated context and this parameter may be used to specify one of those contexts. If the parameter is omitted or 0 the evaluation will be performed in the context of the inspected page.
 		/// </summary>
-		public long ExecutionContextId { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? ExecutionContextId { get; set; }
 		/// <summary>
 		/// Gets or sets Symbolic group name that can be used to release multiple objects.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ObjectGroup { get; set; }
 		/// <summary>
 		/// Gets or sets Specifies whether script run should stop on exceptions and mute console. Overrides setPauseOnException state.
 		/// </summary>
-		public bool DoNotPauseOnExceptionsAndMuteConsole { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? DoNotPauseOnExceptionsAndMuteConsole { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/RunScriptCommandResponse.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/RunScriptCommandResponse.cs
index 86a4756..0495a23 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/RunScriptCommandResponse.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/RunScriptCommandResponse.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets Exception details.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public ExceptionDetails ExceptionDetails { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/ScriptFailedToParseEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/ScriptFailedToParseEvent.cs
index db5df89..e963b42 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/ScriptFailedToParseEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/ScriptFailedToParseEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 {
@@ -36,18 +36,22 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets Determines whether this script is a user extension script.
 		/// </summary>
-		public bool IsContentScript { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IsContentScript { get; set; }
 		/// <summary>
 		/// Gets or sets Determines whether this script is an internal script.
 		/// </summary>
-		public bool IsInternalScript { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IsInternalScript { get; set; }
 		/// <summary>
 		/// Gets or sets URL of source map associated with script (if any).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string SourceMapURL { get; set; }
 		/// <summary>
 		/// Gets or sets True, if this script has sourceURL.
 		/// </summary>
-		public bool HasSourceURL { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? HasSourceURL { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/ScriptParsedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/ScriptParsedEvent.cs
index 2958c82..bb53716 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/ScriptParsedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/ScriptParsedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 {
@@ -36,18 +36,22 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets Determines whether this script is a user extension script.
 		/// </summary>
-		public bool IsContentScript { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IsContentScript { get; set; }
 		/// <summary>
 		/// Gets or sets Determines whether this script is an internal script.
 		/// </summary>
-		public bool IsInternalScript { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IsInternalScript { get; set; }
 		/// <summary>
 		/// Gets or sets URL of source map associated with script (if any).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string SourceMapURL { get; set; }
 		/// <summary>
 		/// Gets or sets True, if this script has sourceURL.
 		/// </summary>
-		public bool HasSourceURL { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? HasSourceURL { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/SearchInContentCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/SearchInContentCommand.cs
index bfddeb7..f5d7e22 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/SearchInContentCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/SearchInContentCommand.cs
@@ -22,10 +22,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets If true, search is case sensitive.
 		/// </summary>
-		public bool CaseSensitive { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? CaseSensitive { get; set; }
 		/// <summary>
 		/// Gets or sets If true, treats string parameter as regex.
 		/// </summary>
-		public bool IsRegex { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IsRegex { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/SetBreakpointByUrlCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/SetBreakpointByUrlCommand.cs
index d27e56c..5f0c899 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/SetBreakpointByUrlCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/SetBreakpointByUrlCommand.cs
@@ -18,18 +18,22 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets URL of the resources to set breakpoint on.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Url { get; set; }
 		/// <summary>
 		/// Gets or sets Regex pattern for the URLs of the resources to set breakpoints on. Either <code>url</code> or <code>urlRegex</code> must be specified.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string UrlRegex { get; set; }
 		/// <summary>
 		/// Gets or sets Offset in the line to set breakpoint at.
 		/// </summary>
-		public long ColumnNumber { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? ColumnNumber { get; set; }
 		/// <summary>
 		/// Gets or sets Expression to use as a breakpoint condition. When specified, debugger will only stop on the breakpoint if this expression evaluates to true.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Condition { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/SetBreakpointCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/SetBreakpointCommand.cs
index 18dc15e..5cafedd 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/SetBreakpointCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/SetBreakpointCommand.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets Expression to use as a breakpoint condition. When specified, debugger will only stop on the breakpoint if this expression evaluates to true.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Condition { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/SetScriptSourceCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/SetScriptSourceCommand.cs
index 981aa7c..b1b9a3d 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/SetScriptSourceCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/SetScriptSourceCommand.cs
@@ -22,6 +22,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets  If true the change will not actually be applied. Preview mode may be used to get result description without actually modifying the code.
 		/// </summary>
-		public bool Preview { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Preview { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/SetScriptSourceCommandResponse.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/SetScriptSourceCommandResponse.cs
index 11f304a..6fc0b8c 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/SetScriptSourceCommandResponse.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/SetScriptSourceCommandResponse.cs
@@ -14,14 +14,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets New stack trace in case editing has happened while VM was stopped.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public CallFrame[] CallFrames { get; set; }
 		/// <summary>
 		/// Gets or sets VM-specific description of the changes applied.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public object Result { get; set; }
 		/// <summary>
 		/// Gets or sets Async stack trace, if any.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public StackTrace AsyncStackTrace { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/SetScriptSourceError.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/SetScriptSourceError.cs
index ecc9e23..1c14f6d 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/SetScriptSourceError.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/SetScriptSourceError.cs
@@ -13,6 +13,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets CompileError
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public object CompileError { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/SetVariableValueCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/SetVariableValueCommand.cs
index 0821aa0..d515cc4 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/SetVariableValueCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/SetVariableValueCommand.cs
@@ -26,10 +26,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets Id of callframe that holds variable.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string CallFrameId { get; set; }
 		/// <summary>
 		/// Gets or sets Object id of closure (function) that holds variable.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string FunctionObjectId { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/SkipStackFramesCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/SkipStackFramesCommand.cs
index 06d37ae..5988293 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/SkipStackFramesCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/SkipStackFramesCommand.cs
@@ -14,10 +14,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets Regular expression defining the scripts to ignore while stepping.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Script { get; set; }
 		/// <summary>
 		/// Gets or sets True, if all content scripts should be ignored.
 		/// </summary>
-		public bool SkipContentScripts { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? SkipContentScripts { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Debugger/StackTrace.cs b/source/ChromeDevTools/Protocol/Chrome/Debugger/StackTrace.cs
index d8ffa3d..d509aea 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Debugger/StackTrace.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Debugger/StackTrace.cs
@@ -17,10 +17,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger
 		/// <summary>
 		/// Gets or sets String label of this stack trace. For async traces this may be a name of the function that initiated the async call.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Description { get; set; }
 		/// <summary>
 		/// Gets or sets Async stack trace, if any.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public StackTrace AsyncStackTrace { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Emulation/SetDeviceMetricsOverrideCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Emulation/SetDeviceMetricsOverrideCommand.cs
index d257032..f9f82e2 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Emulation/SetDeviceMetricsOverrideCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Emulation/SetDeviceMetricsOverrideCommand.cs
@@ -34,14 +34,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Emulation
 		/// <summary>
 		/// Gets or sets Scale to apply to resulting view image. Ignored in |fitWindow| mode.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double Scale { get; set; }
 		/// <summary>
 		/// Gets or sets X offset to shift resulting view image by. Ignored in |fitWindow| mode.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double OffsetX { get; set; }
 		/// <summary>
 		/// Gets or sets Y offset to shift resulting view image by. Ignored in |fitWindow| mode.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double OffsetY { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Emulation/SetGeolocationOverrideCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Emulation/SetGeolocationOverrideCommand.cs
index cf6941c..d1ddbeb 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Emulation/SetGeolocationOverrideCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Emulation/SetGeolocationOverrideCommand.cs
@@ -14,14 +14,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Emulation
 		/// <summary>
 		/// Gets or sets Mock latitude
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double Latitude { get; set; }
 		/// <summary>
 		/// Gets or sets Mock longitude
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double Longitude { get; set; }
 		/// <summary>
 		/// Gets or sets Mock accuracy
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double Accuracy { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Emulation/SetTouchEmulationEnabledCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Emulation/SetTouchEmulationEnabledCommand.cs
index 4d957a9..b050c23 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Emulation/SetTouchEmulationEnabledCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Emulation/SetTouchEmulationEnabledCommand.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Emulation
 		/// <summary>
 		/// Gets or sets Touch/gesture events configuration. Default: current platform.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Configuration { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Emulation/ViewportChangedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Emulation/ViewportChangedEvent.cs
index f23cf7e..7c87588 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Emulation/ViewportChangedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Emulation/ViewportChangedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Emulation
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/FileSystem/Entry.cs b/source/ChromeDevTools/Protocol/Chrome/FileSystem/Entry.cs
index 370e6d3..8988af2 100644
--- a/source/ChromeDevTools/Protocol/Chrome/FileSystem/Entry.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/FileSystem/Entry.cs
@@ -25,14 +25,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.FileSystem
 		/// <summary>
 		/// Gets or sets MIME type of the entry, available for a file only.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string MimeType { get; set; }
 		/// <summary>
 		/// Gets or sets ResourceType of the entry, available for a file only.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Page.ResourceType ResourceType { get; set; }
 		/// <summary>
 		/// Gets or sets True if the entry is a text file.
 		/// </summary>
-		public bool IsTextFile { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IsTextFile { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/FileSystem/RequestDirectoryContentCommandResponse.cs b/source/ChromeDevTools/Protocol/Chrome/FileSystem/RequestDirectoryContentCommandResponse.cs
index 73fbf55..0e0424b 100644
--- a/source/ChromeDevTools/Protocol/Chrome/FileSystem/RequestDirectoryContentCommandResponse.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/FileSystem/RequestDirectoryContentCommandResponse.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.FileSystem
 		/// <summary>
 		/// Gets or sets Contains all entries on directory if the command completed successfully.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Entry[] Entries { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/FileSystem/RequestFileContentCommand.cs b/source/ChromeDevTools/Protocol/Chrome/FileSystem/RequestFileContentCommand.cs
index 87d2674..6cbbb2d 100644
--- a/source/ChromeDevTools/Protocol/Chrome/FileSystem/RequestFileContentCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/FileSystem/RequestFileContentCommand.cs
@@ -22,14 +22,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.FileSystem
 		/// <summary>
 		/// Gets or sets Specifies the start of range to read.
 		/// </summary>
-		public long Start { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? Start { get; set; }
 		/// <summary>
 		/// Gets or sets Specifies the end of range to read exclusively.
 		/// </summary>
-		public long End { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? End { get; set; }
 		/// <summary>
 		/// Gets or sets Overrides charset of the content when content is served as text.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Charset { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/FileSystem/RequestFileContentCommandResponse.cs b/source/ChromeDevTools/Protocol/Chrome/FileSystem/RequestFileContentCommandResponse.cs
index b2e3f53..0176897 100644
--- a/source/ChromeDevTools/Protocol/Chrome/FileSystem/RequestFileContentCommandResponse.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/FileSystem/RequestFileContentCommandResponse.cs
@@ -18,10 +18,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.FileSystem
 		/// <summary>
 		/// Gets or sets Content of the file.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Content { get; set; }
 		/// <summary>
 		/// Gets or sets Charset of the content if it is served as text.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Charset { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/FileSystem/RequestFileSystemRootCommandResponse.cs b/source/ChromeDevTools/Protocol/Chrome/FileSystem/RequestFileSystemRootCommandResponse.cs
index fa9ae25..9b97eb9 100644
--- a/source/ChromeDevTools/Protocol/Chrome/FileSystem/RequestFileSystemRootCommandResponse.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/FileSystem/RequestFileSystemRootCommandResponse.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.FileSystem
 		/// <summary>
 		/// Gets or sets Contains root of the requested FileSystem if the command completed successfully.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Entry Root { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/FileSystem/RequestMetadataCommandResponse.cs b/source/ChromeDevTools/Protocol/Chrome/FileSystem/RequestMetadataCommandResponse.cs
index f7a2174..2e52e73 100644
--- a/source/ChromeDevTools/Protocol/Chrome/FileSystem/RequestMetadataCommandResponse.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/FileSystem/RequestMetadataCommandResponse.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.FileSystem
 		/// <summary>
 		/// Gets or sets Contains metadata of the entry if the command completed successfully.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Metadata Metadata { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/AddHeapSnapshotChunkEvent.cs b/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/AddHeapSnapshotChunkEvent.cs
index 7d750cf..7225b45 100644
--- a/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/AddHeapSnapshotChunkEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/AddHeapSnapshotChunkEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.HeapProfiler
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/GetObjectByHeapObjectIdCommand.cs b/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/GetObjectByHeapObjectIdCommand.cs
index 96b538a..e94afc8 100644
--- a/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/GetObjectByHeapObjectIdCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/GetObjectByHeapObjectIdCommand.cs
@@ -15,6 +15,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.HeapProfiler
 		/// <summary>
 		/// Gets or sets Symbolic group name that can be used to release multiple objects.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ObjectGroup { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/HeapStatsUpdateEvent.cs b/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/HeapStatsUpdateEvent.cs
index dfd874a..9673f30 100644
--- a/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/HeapStatsUpdateEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/HeapStatsUpdateEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.HeapProfiler
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/LastSeenObjectIdEvent.cs b/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/LastSeenObjectIdEvent.cs
index 8cdd3a4..f0ac185 100644
--- a/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/LastSeenObjectIdEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/LastSeenObjectIdEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.HeapProfiler
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/ReportHeapSnapshotProgressEvent.cs b/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/ReportHeapSnapshotProgressEvent.cs
index 4129363..7c4bbfa 100644
--- a/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/ReportHeapSnapshotProgressEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/ReportHeapSnapshotProgressEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.HeapProfiler
 {
@@ -17,6 +17,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.HeapProfiler
 		/// <summary>
 		/// Gets or sets Finished
 		/// </summary>
-		public bool Finished { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Finished { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/ResetProfilesEvent.cs b/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/ResetProfilesEvent.cs
index 1e0f72f..934668a 100644
--- a/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/ResetProfilesEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/ResetProfilesEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.HeapProfiler
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/StartTrackingHeapObjectsCommand.cs b/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/StartTrackingHeapObjectsCommand.cs
index 01996fe..c82d34f 100644
--- a/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/StartTrackingHeapObjectsCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/StartTrackingHeapObjectsCommand.cs
@@ -11,6 +11,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.HeapProfiler
 		/// <summary>
 		/// Gets or sets TrackAllocations
 		/// </summary>
-		public bool TrackAllocations { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? TrackAllocations { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/StopTrackingHeapObjectsCommand.cs b/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/StopTrackingHeapObjectsCommand.cs
index 78fdd0e..a806cb9 100644
--- a/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/StopTrackingHeapObjectsCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/StopTrackingHeapObjectsCommand.cs
@@ -11,6 +11,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.HeapProfiler
 		/// <summary>
 		/// Gets or sets If true 'reportHeapSnapshotProgress' events will be generated while snapshot is being taken when the tracking is stopped.
 		/// </summary>
-		public bool ReportProgress { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? ReportProgress { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/TakeHeapSnapshotCommand.cs b/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/TakeHeapSnapshotCommand.cs
index 39b4296..acfabec 100644
--- a/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/TakeHeapSnapshotCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/HeapProfiler/TakeHeapSnapshotCommand.cs
@@ -11,6 +11,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.HeapProfiler
 		/// <summary>
 		/// Gets or sets If true 'reportHeapSnapshotProgress' events will be generated while snapshot is being taken.
 		/// </summary>
-		public bool ReportProgress { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? ReportProgress { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/IndexedDB/Key.cs b/source/ChromeDevTools/Protocol/Chrome/IndexedDB/Key.cs
index c966624..ec40003 100644
--- a/source/ChromeDevTools/Protocol/Chrome/IndexedDB/Key.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/IndexedDB/Key.cs
@@ -17,18 +17,22 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.IndexedDB
 		/// <summary>
 		/// Gets or sets Number value.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double Number { get; set; }
 		/// <summary>
 		/// Gets or sets String value.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string String { get; set; }
 		/// <summary>
 		/// Gets or sets Date value.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double Date { get; set; }
 		/// <summary>
 		/// Gets or sets Array value.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Key[] Array { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/IndexedDB/KeyPath.cs b/source/ChromeDevTools/Protocol/Chrome/IndexedDB/KeyPath.cs
index 551f3d9..fe22ac9 100644
--- a/source/ChromeDevTools/Protocol/Chrome/IndexedDB/KeyPath.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/IndexedDB/KeyPath.cs
@@ -17,10 +17,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.IndexedDB
 		/// <summary>
 		/// Gets or sets String value.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string String { get; set; }
 		/// <summary>
 		/// Gets or sets Array value.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string[] Array { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/IndexedDB/KeyRange.cs b/source/ChromeDevTools/Protocol/Chrome/IndexedDB/KeyRange.cs
index 164d3e5..87d789d 100644
--- a/source/ChromeDevTools/Protocol/Chrome/IndexedDB/KeyRange.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/IndexedDB/KeyRange.cs
@@ -13,10 +13,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.IndexedDB
 		/// <summary>
 		/// Gets or sets Lower bound.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Key Lower { get; set; }
 		/// <summary>
 		/// Gets or sets Upper bound.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Key Upper { get; set; }
 		/// <summary>
 		/// Gets or sets If true lower bound is open.
diff --git a/source/ChromeDevTools/Protocol/Chrome/IndexedDB/RequestDataCommand.cs b/source/ChromeDevTools/Protocol/Chrome/IndexedDB/RequestDataCommand.cs
index deba238..95b5e5b 100644
--- a/source/ChromeDevTools/Protocol/Chrome/IndexedDB/RequestDataCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/IndexedDB/RequestDataCommand.cs
@@ -38,6 +38,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.IndexedDB
 		/// <summary>
 		/// Gets or sets Key range.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public KeyRange KeyRange { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Input/DispatchKeyEventCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Input/DispatchKeyEventCommand.cs
index 850c7c4..d9845a9 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Input/DispatchKeyEventCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Input/DispatchKeyEventCommand.cs
@@ -18,46 +18,57 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Input
 		/// <summary>
 		/// Gets or sets Bit field representing pressed modifier keys. Alt=1, Ctrl=2, Meta/Command=4, Shift=8 (default: 0).
 		/// </summary>
-		public long Modifiers { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? Modifiers { get; set; }
 		/// <summary>
 		/// Gets or sets Time at which the event occurred. Measured in UTC time in seconds since January 1, 1970 (default: current time).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double Timestamp { get; set; }
 		/// <summary>
 		/// Gets or sets Text as generated by processing a virtual key code with a keyboard layout. Not needed for for <code>keyUp</code> and <code>rawKeyDown</code> events (default: "")
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Text { get; set; }
 		/// <summary>
 		/// Gets or sets Text that would have been generated by the keyboard if no modifiers were pressed (except for shift). Useful for shortcut (accelerator) key handling (default: "").
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string UnmodifiedText { get; set; }
 		/// <summary>
 		/// Gets or sets Unique key identifier (e.g., 'U+0041') (default: "").
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string KeyIdentifier { get; set; }
 		/// <summary>
 		/// Gets or sets Unique DOM defined string value for each physical key (e.g., 'KeyA') (default: "").
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Code { get; set; }
 		/// <summary>
 		/// Gets or sets Windows virtual key code (default: 0).
 		/// </summary>
-		public long WindowsVirtualKeyCode { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? WindowsVirtualKeyCode { get; set; }
 		/// <summary>
 		/// Gets or sets Native virtual key code (default: 0).
 		/// </summary>
-		public long NativeVirtualKeyCode { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? NativeVirtualKeyCode { get; set; }
 		/// <summary>
 		/// Gets or sets Whether the event was generated from auto repeat (default: false).
 		/// </summary>
-		public bool AutoRepeat { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? AutoRepeat { get; set; }
 		/// <summary>
 		/// Gets or sets Whether the event was generated from the keypad (default: false).
 		/// </summary>
-		public bool IsKeypad { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IsKeypad { get; set; }
 		/// <summary>
 		/// Gets or sets Whether the event was a system key event (default: false).
 		/// </summary>
-		public bool IsSystemKey { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IsSystemKey { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Input/DispatchMouseEventCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Input/DispatchMouseEventCommand.cs
index d27d937..79e6672 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Input/DispatchMouseEventCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Input/DispatchMouseEventCommand.cs
@@ -26,18 +26,22 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Input
 		/// <summary>
 		/// Gets or sets Bit field representing pressed modifier keys. Alt=1, Ctrl=2, Meta/Command=4, Shift=8 (default: 0).
 		/// </summary>
-		public long Modifiers { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? Modifiers { get; set; }
 		/// <summary>
 		/// Gets or sets Time at which the event occurred. Measured in UTC time in seconds since January 1, 1970 (default: current time).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double Timestamp { get; set; }
 		/// <summary>
 		/// Gets or sets Mouse button (default: "none").
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Button { get; set; }
 		/// <summary>
 		/// Gets or sets Number of times the mouse button was clicked (default: 0).
 		/// </summary>
-		public long ClickCount { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? ClickCount { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Input/DispatchTouchEventCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Input/DispatchTouchEventCommand.cs
index ee07ea9..3e52eb5 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Input/DispatchTouchEventCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Input/DispatchTouchEventCommand.cs
@@ -22,10 +22,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Input
 		/// <summary>
 		/// Gets or sets Bit field representing pressed modifier keys. Alt=1, Ctrl=2, Meta/Command=4, Shift=8 (default: 0).
 		/// </summary>
-		public long Modifiers { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? Modifiers { get; set; }
 		/// <summary>
 		/// Gets or sets Time at which the event occurred. Measured in UTC time in seconds since January 1, 1970 (default: current time).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double Timestamp { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Input/EmulateTouchFromMouseEventCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Input/EmulateTouchFromMouseEventCommand.cs
index cf55a67..76dd249 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Input/EmulateTouchFromMouseEventCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Input/EmulateTouchFromMouseEventCommand.cs
@@ -34,18 +34,22 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Input
 		/// <summary>
 		/// Gets or sets X delta in DIP for mouse wheel event (default: 0).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double DeltaX { get; set; }
 		/// <summary>
 		/// Gets or sets Y delta in DIP for mouse wheel event (default: 0).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double DeltaY { get; set; }
 		/// <summary>
 		/// Gets or sets Bit field representing pressed modifier keys. Alt=1, Ctrl=2, Meta/Command=4, Shift=8 (default: 0).
 		/// </summary>
-		public long Modifiers { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? Modifiers { get; set; }
 		/// <summary>
 		/// Gets or sets Number of times the mouse button was clicked (default: 0).
 		/// </summary>
-		public long ClickCount { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? ClickCount { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Input/SynthesizePinchGestureCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Input/SynthesizePinchGestureCommand.cs
index 2018136..34cf27e 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Input/SynthesizePinchGestureCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Input/SynthesizePinchGestureCommand.cs
@@ -26,10 +26,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Input
 		/// <summary>
 		/// Gets or sets Relative pointer speed in pixels per second (default: 800).
 		/// </summary>
-		public long RelativeSpeed { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? RelativeSpeed { get; set; }
 		/// <summary>
 		/// Gets or sets Which type of input events to be generated (default: 'default', which queries the platform for the preferred input type).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string GestureSourceType { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Input/SynthesizeScrollGestureCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Input/SynthesizeScrollGestureCommand.cs
index 50c0d37..cd96bc7 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Input/SynthesizeScrollGestureCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Input/SynthesizeScrollGestureCommand.cs
@@ -22,30 +22,37 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Input
 		/// <summary>
 		/// Gets or sets The distance to scroll along the X axis (positive to scroll left).
 		/// </summary>
-		public long XDistance { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? XDistance { get; set; }
 		/// <summary>
 		/// Gets or sets The distance to scroll along the Y axis (positive to scroll up).
 		/// </summary>
-		public long YDistance { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? YDistance { get; set; }
 		/// <summary>
 		/// Gets or sets The number of additional pixels to scroll back along the X axis, in addition to the given distance.
 		/// </summary>
-		public long XOverscroll { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? XOverscroll { get; set; }
 		/// <summary>
 		/// Gets or sets The number of additional pixels to scroll back along the Y axis, in addition to the given distance.
 		/// </summary>
-		public long YOverscroll { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? YOverscroll { get; set; }
 		/// <summary>
 		/// Gets or sets Prevent fling (default: true).
 		/// </summary>
-		public bool PreventFling { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? PreventFling { get; set; }
 		/// <summary>
 		/// Gets or sets Swipe speed in pixels per second (default: 800).
 		/// </summary>
-		public long Speed { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? Speed { get; set; }
 		/// <summary>
 		/// Gets or sets Which type of input events to be generated (default: 'default', which queries the platform for the preferred input type).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string GestureSourceType { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Input/SynthesizeTapGestureCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Input/SynthesizeTapGestureCommand.cs
index 99f5acc..4cab53d 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Input/SynthesizeTapGestureCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Input/SynthesizeTapGestureCommand.cs
@@ -22,14 +22,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Input
 		/// <summary>
 		/// Gets or sets Duration between touchdown and touchup events in ms (default: 50).
 		/// </summary>
-		public long Duration { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? Duration { get; set; }
 		/// <summary>
 		/// Gets or sets Number of times to perform the tap (e.g. 2 for double tap, default: 1).
 		/// </summary>
-		public long TapCount { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? TapCount { get; set; }
 		/// <summary>
 		/// Gets or sets Which type of input events to be generated (default: 'default', which queries the platform for the preferred input type).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string GestureSourceType { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Input/TouchPoint.cs b/source/ChromeDevTools/Protocol/Chrome/Input/TouchPoint.cs
index b43a7b6..e2ded6d 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Input/TouchPoint.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Input/TouchPoint.cs
@@ -25,22 +25,27 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Input
 		/// <summary>
 		/// Gets or sets X radius of the touch area (default: 1).
 		/// </summary>
-		public long RadiusX { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? RadiusX { get; set; }
 		/// <summary>
 		/// Gets or sets Y radius of the touch area (default: 1).
 		/// </summary>
-		public long RadiusY { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? RadiusY { get; set; }
 		/// <summary>
 		/// Gets or sets Rotation angle (default: 0.0).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double RotationAngle { get; set; }
 		/// <summary>
 		/// Gets or sets Force (default: 1.0).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double Force { get; set; }
 		/// <summary>
 		/// Gets or sets Identifier used to track touch sources between events, must be unique within an event.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double Id { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Inspector/DetachedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Inspector/DetachedEvent.cs
index e2633c7..13dc005 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Inspector/DetachedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Inspector/DetachedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Inspector
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Inspector/EvaluateForTestInFrontendEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Inspector/EvaluateForTestInFrontendEvent.cs
index 1f2e71e..6f39116 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Inspector/EvaluateForTestInFrontendEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Inspector/EvaluateForTestInFrontendEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Inspector
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Inspector/InspectEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Inspector/InspectEvent.cs
index 3df1647..59f1a31 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Inspector/InspectEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Inspector/InspectEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Inspector
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Inspector/TargetCrashedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Inspector/TargetCrashedEvent.cs
index 089323c..45f1e1a 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Inspector/TargetCrashedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Inspector/TargetCrashedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Inspector
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/LayerTree/Layer.cs b/source/ChromeDevTools/Protocol/Chrome/LayerTree/Layer.cs
index 7cbab0d..f79ef91 100644
--- a/source/ChromeDevTools/Protocol/Chrome/LayerTree/Layer.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/LayerTree/Layer.cs
@@ -17,11 +17,13 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.LayerTree
 		/// <summary>
 		/// Gets or sets The id of parent (not present for root).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ParentLayerId { get; set; }
 		/// <summary>
 		/// Gets or sets The backend id for the node associated with this layer.
 		/// </summary>
-		public long BackendNodeId { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? BackendNodeId { get; set; }
 		/// <summary>
 		/// Gets or sets Offset from parent layer, X coordinate.
 		/// </summary>
@@ -41,18 +43,22 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.LayerTree
 		/// <summary>
 		/// Gets or sets Transformation matrix for layer, default is identity matrix
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double[] Transform { get; set; }
 		/// <summary>
 		/// Gets or sets Transform anchor point X, absent if no transform specified
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double AnchorX { get; set; }
 		/// <summary>
 		/// Gets or sets Transform anchor point Y, absent if no transform specified
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double AnchorY { get; set; }
 		/// <summary>
 		/// Gets or sets Transform anchor point Z, absent if no transform specified
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double AnchorZ { get; set; }
 		/// <summary>
 		/// Gets or sets Indicates how many time this layer has painted.
@@ -65,10 +71,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.LayerTree
 		/// <summary>
 		/// Gets or sets Set if layer is not visible.
 		/// </summary>
-		public bool Invisible { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Invisible { get; set; }
 		/// <summary>
 		/// Gets or sets Rectangles scrolling on main thread only.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public ScrollRect[] ScrollRects { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/LayerTree/LayerPaintedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/LayerTree/LayerPaintedEvent.cs
index 9cd4af3..f680cae 100644
--- a/source/ChromeDevTools/Protocol/Chrome/LayerTree/LayerPaintedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/LayerTree/LayerPaintedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.LayerTree
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/LayerTree/LayerTreeDidChangeEvent.cs b/source/ChromeDevTools/Protocol/Chrome/LayerTree/LayerTreeDidChangeEvent.cs
index c22b8ef..fd423e1 100644
--- a/source/ChromeDevTools/Protocol/Chrome/LayerTree/LayerTreeDidChangeEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/LayerTree/LayerTreeDidChangeEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.LayerTree
 {
@@ -9,6 +9,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.LayerTree
 		/// <summary>
 		/// Gets or sets Layer tree, absent if not in the comspositing mode.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Layer[] Layers { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/LayerTree/ProfileSnapshotCommand.cs b/source/ChromeDevTools/Protocol/Chrome/LayerTree/ProfileSnapshotCommand.cs
index ef18933..771d3b2 100644
--- a/source/ChromeDevTools/Protocol/Chrome/LayerTree/ProfileSnapshotCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/LayerTree/ProfileSnapshotCommand.cs
@@ -15,14 +15,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.LayerTree
 		/// <summary>
 		/// Gets or sets The maximum number of times to replay the snapshot (1, if not specified).
 		/// </summary>
-		public long MinRepeatCount { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? MinRepeatCount { get; set; }
 		/// <summary>
 		/// Gets or sets The minimum duration (in seconds) to replay the snapshot.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double MinDuration { get; set; }
 		/// <summary>
 		/// Gets or sets The clip rectangle to apply when replaying the snapshot.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public DOM.Rect ClipRect { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/LayerTree/ReplaySnapshotCommand.cs b/source/ChromeDevTools/Protocol/Chrome/LayerTree/ReplaySnapshotCommand.cs
index 4c1a8f8..81f336f 100644
--- a/source/ChromeDevTools/Protocol/Chrome/LayerTree/ReplaySnapshotCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/LayerTree/ReplaySnapshotCommand.cs
@@ -18,14 +18,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.LayerTree
 		/// <summary>
 		/// Gets or sets The first step to replay from (replay from the very start if not specified).
 		/// </summary>
-		public long FromStep { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? FromStep { get; set; }
 		/// <summary>
 		/// Gets or sets The last step to replay to (replay till the end if not specified).
 		/// </summary>
-		public long ToStep { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? ToStep { get; set; }
 		/// <summary>
 		/// Gets or sets The scale to apply while replaying (defaults to 1).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double Scale { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Network/CachedResource.cs b/source/ChromeDevTools/Protocol/Chrome/Network/CachedResource.cs
index 36805ad..0e5466c 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Network/CachedResource.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Network/CachedResource.cs
@@ -21,6 +21,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Network
 		/// <summary>
 		/// Gets or sets Cached response data.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Response Response { get; set; }
 		/// <summary>
 		/// Gets or sets Cached response body size.
diff --git a/source/ChromeDevTools/Protocol/Chrome/Network/DataReceivedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Network/DataReceivedEvent.cs
index 5b02547..922018e 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Network/DataReceivedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Network/DataReceivedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Network
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Network/EventSourceMessageReceivedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Network/EventSourceMessageReceivedEvent.cs
index ea086cb..b53dbed 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Network/EventSourceMessageReceivedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Network/EventSourceMessageReceivedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Network
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Network/Initiator.cs b/source/ChromeDevTools/Protocol/Chrome/Network/Initiator.cs
index 032d423..65cd26e 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Network/Initiator.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Network/Initiator.cs
@@ -17,18 +17,22 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Network
 		/// <summary>
 		/// Gets or sets Initiator JavaScript stack trace, set for Script only.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Console.CallFrame[] StackTrace { get; set; }
 		/// <summary>
 		/// Gets or sets Initiator URL, set for Parser type only.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Url { get; set; }
 		/// <summary>
 		/// Gets or sets Initiator line number, set for Parser type only.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double LineNumber { get; set; }
 		/// <summary>
 		/// Gets or sets Initiator asynchronous JavaScript stack trace, if available.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Console.AsyncStackTrace AsyncStackTrace { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Network/LoadingFailedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Network/LoadingFailedEvent.cs
index eb57769..ed295f3 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Network/LoadingFailedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Network/LoadingFailedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Network
 {
@@ -28,6 +28,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Network
 		/// <summary>
 		/// Gets or sets True if loading was canceled.
 		/// </summary>
-		public bool Canceled { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Canceled { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Network/LoadingFinishedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Network/LoadingFinishedEvent.cs
index b2a46e0..90285e0 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Network/LoadingFinishedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Network/LoadingFinishedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Network
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Network/Request.cs b/source/ChromeDevTools/Protocol/Chrome/Network/Request.cs
index e07ecaa..a8909b6 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Network/Request.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Network/Request.cs
@@ -25,6 +25,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Network
 		/// <summary>
 		/// Gets or sets HTTP POST request data.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string PostData { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Network/RequestServedFromCacheEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Network/RequestServedFromCacheEvent.cs
index e05ccee..80fa2b0 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Network/RequestServedFromCacheEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Network/RequestServedFromCacheEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Network
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Network/RequestWillBeSentEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Network/RequestWillBeSentEvent.cs
index 716c204..469df0b 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Network/RequestWillBeSentEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Network/RequestWillBeSentEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Network
 {
@@ -44,10 +44,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Network
 		/// <summary>
 		/// Gets or sets Redirect response data.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Response RedirectResponse { get; set; }
 		/// <summary>
 		/// Gets or sets Type of this resource.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Page.ResourceType Type { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Network/Response.cs b/source/ChromeDevTools/Protocol/Chrome/Network/Response.cs
index 78580bf..88f2e81 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Network/Response.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Network/Response.cs
@@ -29,6 +29,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Network
 		/// <summary>
 		/// Gets or sets HTTP response headers text.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string HeadersText { get; set; }
 		/// <summary>
 		/// Gets or sets Resource mimeType as determined by the browser.
@@ -37,10 +38,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Network
 		/// <summary>
 		/// Gets or sets Refined HTTP request headers that were actually transmitted over the network.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Dictionary<string, string> RequestHeaders { get; set; }
 		/// <summary>
 		/// Gets or sets HTTP request headers text.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string RequestHeadersText { get; set; }
 		/// <summary>
 		/// Gets or sets Specifies whether physical connection was actually reused for this request.
@@ -53,19 +56,23 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Network
 		/// <summary>
 		/// Gets or sets Remote IP address.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string RemoteIPAddress { get; set; }
 		/// <summary>
 		/// Gets or sets Remote port.
 		/// </summary>
-		public long RemotePort { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? RemotePort { get; set; }
 		/// <summary>
 		/// Gets or sets Specifies that the request was served from the disk cache.
 		/// </summary>
-		public bool FromDiskCache { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? FromDiskCache { get; set; }
 		/// <summary>
 		/// Gets or sets Specifies that the request was served from the ServiceWorker.
 		/// </summary>
-		public bool FromServiceWorker { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? FromServiceWorker { get; set; }
 		/// <summary>
 		/// Gets or sets Total number of bytes received for this request so far.
 		/// </summary>
@@ -73,10 +80,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Network
 		/// <summary>
 		/// Gets or sets Timing information for the given request.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public ResourceTiming Timing { get; set; }
 		/// <summary>
 		/// Gets or sets Protocol used to fetch this resquest.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Protocol { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Network/ResponseReceivedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Network/ResponseReceivedEvent.cs
index c77a376..55d6da9 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Network/ResponseReceivedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Network/ResponseReceivedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Network
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketClosedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketClosedEvent.cs
index b4b8233..f3def23 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketClosedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketClosedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Network
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketCreatedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketCreatedEvent.cs
index 937c67e..363dd11 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketCreatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketCreatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Network
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketFrameErrorEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketFrameErrorEvent.cs
index ac9afed..5bcdc11 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketFrameErrorEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketFrameErrorEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Network
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketFrameReceivedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketFrameReceivedEvent.cs
index 18042cb..74a0240 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketFrameReceivedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketFrameReceivedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Network
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketFrameSentEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketFrameSentEvent.cs
index 4bea1a1..060172b 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketFrameSentEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketFrameSentEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Network
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketHandshakeResponseReceivedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketHandshakeResponseReceivedEvent.cs
index 54a35ae..f1a7a52 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketHandshakeResponseReceivedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketHandshakeResponseReceivedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Network
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketResponse.cs b/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketResponse.cs
index 4e0b6c2..88b087d 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketResponse.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketResponse.cs
@@ -25,14 +25,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Network
 		/// <summary>
 		/// Gets or sets HTTP response headers text.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string HeadersText { get; set; }
 		/// <summary>
 		/// Gets or sets HTTP request headers.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Dictionary<string, string> RequestHeaders { get; set; }
 		/// <summary>
 		/// Gets or sets HTTP request headers text.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string RequestHeadersText { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketWillSendHandshakeRequestEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketWillSendHandshakeRequestEvent.cs
index 0dbb451..8667018 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketWillSendHandshakeRequestEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Network/WebSocketWillSendHandshakeRequestEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Network
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Page/ColorPickedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Page/ColorPickedEvent.cs
index 5c6db56..45ec9c5 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Page/ColorPickedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Page/ColorPickedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Page/DomContentEventFiredEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Page/DomContentEventFiredEvent.cs
index 1c56604..3bb1ea2 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Page/DomContentEventFiredEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Page/DomContentEventFiredEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Page/Frame.cs b/source/ChromeDevTools/Protocol/Chrome/Page/Frame.cs
index 0c070ee..ef99c61 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Page/Frame.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Page/Frame.cs
@@ -17,6 +17,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 		/// <summary>
 		/// Gets or sets Parent frame identifier.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ParentId { get; set; }
 		/// <summary>
 		/// Gets or sets Identifier of the loader associated with this frame.
@@ -25,6 +26,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 		/// <summary>
 		/// Gets or sets Frame's name as specified in the tag.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Name { get; set; }
 		/// <summary>
 		/// Gets or sets Frame document's URL.
diff --git a/source/ChromeDevTools/Protocol/Chrome/Page/FrameAttachedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Page/FrameAttachedEvent.cs
index 0413982..e426f3d 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Page/FrameAttachedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Page/FrameAttachedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Page/FrameClearedScheduledNavigationEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Page/FrameClearedScheduledNavigationEvent.cs
index 5395199..2295b22 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Page/FrameClearedScheduledNavigationEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Page/FrameClearedScheduledNavigationEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Page/FrameDetachedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Page/FrameDetachedEvent.cs
index 0e5456c..c48eab4 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Page/FrameDetachedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Page/FrameDetachedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Page/FrameNavigatedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Page/FrameNavigatedEvent.cs
index 5b7587e..67100f6 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Page/FrameNavigatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Page/FrameNavigatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Page/FrameResizedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Page/FrameResizedEvent.cs
index a3dad76..36f1dd3 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Page/FrameResizedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Page/FrameResizedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Page/FrameResourceTree.cs b/source/ChromeDevTools/Protocol/Chrome/Page/FrameResourceTree.cs
index b7ac8eb..6cace98 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Page/FrameResourceTree.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Page/FrameResourceTree.cs
@@ -17,6 +17,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 		/// <summary>
 		/// Gets or sets Child frames.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public FrameResourceTree[] ChildFrames { get; set; }
 		public class ResourcesArray
 		{
@@ -35,11 +36,13 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 		/// <summary>
 		/// Gets or sets True if the resource failed to load.
 		/// </summary>
-		public bool Failed { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Failed { get; set; }
 		/// <summary>
 		/// Gets or sets True if the resource was canceled during loading.
 		/// </summary>
-		public bool Canceled { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Canceled { get; set; }
 		}
 
 		/// <summary>
diff --git a/source/ChromeDevTools/Protocol/Chrome/Page/FrameScheduledNavigationEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Page/FrameScheduledNavigationEvent.cs
index 4346bd4..0371060 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Page/FrameScheduledNavigationEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Page/FrameScheduledNavigationEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Page/FrameStartedLoadingEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Page/FrameStartedLoadingEvent.cs
index e0ca1d2..0536370 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Page/FrameStartedLoadingEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Page/FrameStartedLoadingEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Page/FrameStoppedLoadingEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Page/FrameStoppedLoadingEvent.cs
index 55fb01d..437b261 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Page/FrameStoppedLoadingEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Page/FrameStoppedLoadingEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Page/HandleJavaScriptDialogCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Page/HandleJavaScriptDialogCommand.cs
index 1c754b9..9619ddc 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Page/HandleJavaScriptDialogCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Page/HandleJavaScriptDialogCommand.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 		/// <summary>
 		/// Gets or sets The text to enter into the dialog prompt before accepting. Used only if this is a prompt dialog.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string PromptText { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Page/InterstitialHiddenEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Page/InterstitialHiddenEvent.cs
index 2f10673..81e1c6b 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Page/InterstitialHiddenEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Page/InterstitialHiddenEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Page/InterstitialShownEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Page/InterstitialShownEvent.cs
index 9b9ab79..4302255 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Page/InterstitialShownEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Page/InterstitialShownEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Page/JavascriptDialogClosedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Page/JavascriptDialogClosedEvent.cs
index 6c88e7b..e4e2a4e 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Page/JavascriptDialogClosedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Page/JavascriptDialogClosedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Page/JavascriptDialogOpeningEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Page/JavascriptDialogOpeningEvent.cs
index 68b7956..a531c3b 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Page/JavascriptDialogOpeningEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Page/JavascriptDialogOpeningEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Page/LoadEventFiredEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Page/LoadEventFiredEvent.cs
index 8b4a1a9..73480d1 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Page/LoadEventFiredEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Page/LoadEventFiredEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Page/ReloadCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Page/ReloadCommand.cs
index 5278221..3e98e2b 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Page/ReloadCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Page/ReloadCommand.cs
@@ -14,10 +14,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 		/// <summary>
 		/// Gets or sets If true, browser cache is ignored (as if the user pressed Shift+refresh).
 		/// </summary>
-		public bool IgnoreCache { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IgnoreCache { get; set; }
 		/// <summary>
 		/// Gets or sets If set, the script will be injected into all frames of the inspected page after reload.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ScriptToEvaluateOnLoad { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Page/ScreencastFrameEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Page/ScreencastFrameEvent.cs
index de3b218..a9dfb3c 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Page/ScreencastFrameEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Page/ScreencastFrameEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 {
@@ -20,6 +20,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 		/// <summary>
 		/// Gets or sets Frame number.
 		/// </summary>
-		public long FrameNumber { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? FrameNumber { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Page/ScreencastFrameMetadata.cs b/source/ChromeDevTools/Protocol/Chrome/Page/ScreencastFrameMetadata.cs
index e62e92e..6182f81 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Page/ScreencastFrameMetadata.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Page/ScreencastFrameMetadata.cs
@@ -37,6 +37,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 		/// <summary>
 		/// Gets or sets Frame swap timestamp.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double Timestamp { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Page/ScreencastVisibilityChangedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Page/ScreencastVisibilityChangedEvent.cs
index 791d3c7..c2c7aa0 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Page/ScreencastVisibilityChangedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Page/ScreencastVisibilityChangedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Page/SearchInResourceCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Page/SearchInResourceCommand.cs
index 4ac117f..154e7ec 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Page/SearchInResourceCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Page/SearchInResourceCommand.cs
@@ -26,10 +26,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 		/// <summary>
 		/// Gets or sets If true, search is case sensitive.
 		/// </summary>
-		public bool CaseSensitive { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? CaseSensitive { get; set; }
 		/// <summary>
 		/// Gets or sets If true, treats string parameter as regex.
 		/// </summary>
-		public bool IsRegex { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IsRegex { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Page/SetDeviceMetricsOverrideCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Page/SetDeviceMetricsOverrideCommand.cs
index 4b397a0..74b1f9b 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Page/SetDeviceMetricsOverrideCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Page/SetDeviceMetricsOverrideCommand.cs
@@ -34,14 +34,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 		/// <summary>
 		/// Gets or sets Scale to apply to resulting view image. Ignored in |fitWindow| mode.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double Scale { get; set; }
 		/// <summary>
 		/// Gets or sets X offset to shift resulting view image by. Ignored in |fitWindow| mode.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double OffsetX { get; set; }
 		/// <summary>
 		/// Gets or sets Y offset to shift resulting view image by. Ignored in |fitWindow| mode.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double OffsetY { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Page/SetGeolocationOverrideCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Page/SetGeolocationOverrideCommand.cs
index c22a45e..fb29096 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Page/SetGeolocationOverrideCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Page/SetGeolocationOverrideCommand.cs
@@ -14,14 +14,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 		/// <summary>
 		/// Gets or sets Mock latitude
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double Latitude { get; set; }
 		/// <summary>
 		/// Gets or sets Mock longitude
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double Longitude { get; set; }
 		/// <summary>
 		/// Gets or sets Mock accuracy
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double Accuracy { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Page/SetOverlayMessageCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Page/SetOverlayMessageCommand.cs
index 81a445c..b9aebc8 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Page/SetOverlayMessageCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Page/SetOverlayMessageCommand.cs
@@ -14,6 +14,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 		/// <summary>
 		/// Gets or sets Overlay message to display when paused in debugger.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Message { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Page/SetShowViewportSizeOnResizeCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Page/SetShowViewportSizeOnResizeCommand.cs
index 0eaaacf..e3a869e 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Page/SetShowViewportSizeOnResizeCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Page/SetShowViewportSizeOnResizeCommand.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 		/// <summary>
 		/// Gets or sets Whether to paint grid as well.
 		/// </summary>
-		public bool ShowGrid { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? ShowGrid { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Page/SetTouchEmulationEnabledCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Page/SetTouchEmulationEnabledCommand.cs
index b32af7e..3c2df78 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Page/SetTouchEmulationEnabledCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Page/SetTouchEmulationEnabledCommand.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 		/// <summary>
 		/// Gets or sets Touch/gesture events configuration. Default: current platform.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Configuration { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Page/StartScreencastCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Page/StartScreencastCommand.cs
index 271a6eb..1a3e617 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Page/StartScreencastCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Page/StartScreencastCommand.cs
@@ -14,18 +14,22 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Page
 		/// <summary>
 		/// Gets or sets Image compression format.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Format { get; set; }
 		/// <summary>
 		/// Gets or sets Compression quality from range [0..100].
 		/// </summary>
-		public long Quality { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? Quality { get; set; }
 		/// <summary>
 		/// Gets or sets Maximum screenshot width.
 		/// </summary>
-		public long MaxWidth { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? MaxWidth { get; set; }
 		/// <summary>
 		/// Gets or sets Maximum screenshot height.
 		/// </summary>
-		public long MaxHeight { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? MaxHeight { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Power/DataAvailableEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Power/DataAvailableEvent.cs
index 2b4b5d0..37fe165 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Power/DataAvailableEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Power/DataAvailableEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Power
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Profiler/CPUProfile.cs b/source/ChromeDevTools/Protocol/Chrome/Profiler/CPUProfile.cs
index 099f81d..b44657d 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Profiler/CPUProfile.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Profiler/CPUProfile.cs
@@ -25,10 +25,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Profiler
 		/// <summary>
 		/// Gets or sets Ids of samples top nodes.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public long[] Samples { get; set; }
 		/// <summary>
 		/// Gets or sets Timestamps of the samples in microseconds.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double[] Timestamps { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Profiler/ConsoleProfileFinishedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Profiler/ConsoleProfileFinishedEvent.cs
index 95fbc59..2d4f498 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Profiler/ConsoleProfileFinishedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Profiler/ConsoleProfileFinishedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Profiler
 {
@@ -21,6 +21,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Profiler
 		/// <summary>
 		/// Gets or sets Profile title passed as argunet to console.profile().
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Title { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Profiler/ConsoleProfileStartedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Profiler/ConsoleProfileStartedEvent.cs
index ec42fc3..3641d14 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Profiler/ConsoleProfileStartedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Profiler/ConsoleProfileStartedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Profiler
 {
@@ -20,6 +20,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Profiler
 		/// <summary>
 		/// Gets or sets Profile title passed as argument to console.profile().
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Title { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Runtime/CallArgument.cs b/source/ChromeDevTools/Protocol/Chrome/Runtime/CallArgument.cs
index ebb935b..515af42 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Runtime/CallArgument.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Runtime/CallArgument.cs
@@ -13,14 +13,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Runtime
 		/// <summary>
 		/// Gets or sets Primitive value, or description string if the value can not be JSON-stringified (like NaN, Infinity, -Infinity, -0).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public object Value { get; set; }
 		/// <summary>
 		/// Gets or sets Remote object handle.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ObjectId { get; set; }
 		/// <summary>
 		/// Gets or sets Object type.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Type { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Runtime/CallFunctionOnCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Runtime/CallFunctionOnCommand.cs
index 390e3d5..a8ce50b 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Runtime/CallFunctionOnCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Runtime/CallFunctionOnCommand.cs
@@ -22,18 +22,22 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Runtime
 		/// <summary>
 		/// Gets or sets Call arguments. All call arguments must belong to the same JavaScript world as the target object.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public CallArgument[] Arguments { get; set; }
 		/// <summary>
 		/// Gets or sets Specifies whether function call should stop on exceptions and mute console. Overrides setPauseOnException state.
 		/// </summary>
-		public bool DoNotPauseOnExceptionsAndMuteConsole { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? DoNotPauseOnExceptionsAndMuteConsole { get; set; }
 		/// <summary>
 		/// Gets or sets Whether the result is expected to be a JSON object which should be sent by value.
 		/// </summary>
-		public bool ReturnByValue { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? ReturnByValue { get; set; }
 		/// <summary>
 		/// Gets or sets Whether preview should be generated for the result.
 		/// </summary>
-		public bool GeneratePreview { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? GeneratePreview { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Runtime/CallFunctionOnCommandResponse.cs b/source/ChromeDevTools/Protocol/Chrome/Runtime/CallFunctionOnCommandResponse.cs
index 9b8894e..a411171 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Runtime/CallFunctionOnCommandResponse.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Runtime/CallFunctionOnCommandResponse.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Runtime
 		/// <summary>
 		/// Gets or sets True if the result was thrown during the evaluation.
 		/// </summary>
-		public bool WasThrown { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? WasThrown { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Runtime/CustomPreview.cs b/source/ChromeDevTools/Protocol/Chrome/Runtime/CustomPreview.cs
index 472ced7..f13348a 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Runtime/CustomPreview.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Runtime/CustomPreview.cs
@@ -25,6 +25,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Runtime
 		/// <summary>
 		/// Gets or sets ConfigObjectId
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ConfigObjectId { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Runtime/EntryPreview.cs b/source/ChromeDevTools/Protocol/Chrome/Runtime/EntryPreview.cs
index 6e94902..24cd89b 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Runtime/EntryPreview.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Runtime/EntryPreview.cs
@@ -13,6 +13,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Runtime
 		/// <summary>
 		/// Gets or sets Preview of the key. Specified for map-like collection entries.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public ObjectPreview Key { get; set; }
 		/// <summary>
 		/// Gets or sets Preview of the value.
diff --git a/source/ChromeDevTools/Protocol/Chrome/Runtime/EvaluateCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Runtime/EvaluateCommand.cs
index 22fd61d..9026149 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Runtime/EvaluateCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Runtime/EvaluateCommand.cs
@@ -18,26 +18,32 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Runtime
 		/// <summary>
 		/// Gets or sets Symbolic group name that can be used to release multiple objects.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ObjectGroup { get; set; }
 		/// <summary>
 		/// Gets or sets Determines whether Command Line API should be available during the evaluation.
 		/// </summary>
-		public bool IncludeCommandLineAPI { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IncludeCommandLineAPI { get; set; }
 		/// <summary>
 		/// Gets or sets Specifies whether evaluation should stop on exceptions and mute console. Overrides setPauseOnException state.
 		/// </summary>
-		public bool DoNotPauseOnExceptionsAndMuteConsole { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? DoNotPauseOnExceptionsAndMuteConsole { get; set; }
 		/// <summary>
 		/// Gets or sets Specifies in which isolated context to perform evaluation. Each content script lives in an isolated context and this parameter may be used to specify one of those contexts. If the parameter is omitted or 0 the evaluation will be performed in the context of the inspected page.
 		/// </summary>
-		public long ContextId { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? ContextId { get; set; }
 		/// <summary>
 		/// Gets or sets Whether the result is expected to be a JSON object that should be sent by value.
 		/// </summary>
-		public bool ReturnByValue { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? ReturnByValue { get; set; }
 		/// <summary>
 		/// Gets or sets Whether preview should be generated for the result.
 		/// </summary>
-		public bool GeneratePreview { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? GeneratePreview { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Runtime/EvaluateCommandResponse.cs b/source/ChromeDevTools/Protocol/Chrome/Runtime/EvaluateCommandResponse.cs
index 8a86877..702bda7 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Runtime/EvaluateCommandResponse.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Runtime/EvaluateCommandResponse.cs
@@ -18,10 +18,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Runtime
 		/// <summary>
 		/// Gets or sets True if the result was thrown during the evaluation.
 		/// </summary>
-		public bool WasThrown { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? WasThrown { get; set; }
 		/// <summary>
 		/// Gets or sets Exception details.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Debugger.ExceptionDetails ExceptionDetails { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Runtime/EventListener.cs b/source/ChromeDevTools/Protocol/Chrome/Runtime/EventListener.cs
index 5fa1515..59c441a 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Runtime/EventListener.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Runtime/EventListener.cs
@@ -25,6 +25,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Runtime
 		/// <summary>
 		/// Gets or sets Event handler function value.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Runtime.RemoteObject Handler { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Runtime/ExecutionContextCreatedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Runtime/ExecutionContextCreatedEvent.cs
index 8e60972..0a60e50 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Runtime/ExecutionContextCreatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Runtime/ExecutionContextCreatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Runtime
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Runtime/ExecutionContextDescription.cs b/source/ChromeDevTools/Protocol/Chrome/Runtime/ExecutionContextDescription.cs
index 6048c31..38c8116 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Runtime/ExecutionContextDescription.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Runtime/ExecutionContextDescription.cs
@@ -17,7 +17,8 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Runtime
 		/// <summary>
 		/// Gets or sets True if this is a context where inpspected web page scripts run. False if it is a content script isolated context.
 		/// </summary>
-		public bool IsPageContext { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IsPageContext { get; set; }
 		/// <summary>
 		/// Gets or sets Execution context origin.
 		/// </summary>
diff --git a/source/ChromeDevTools/Protocol/Chrome/Runtime/ExecutionContextDestroyedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Runtime/ExecutionContextDestroyedEvent.cs
index 3b2747e..4d43bd4 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Runtime/ExecutionContextDestroyedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Runtime/ExecutionContextDestroyedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Runtime
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Runtime/ExecutionContextsClearedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Runtime/ExecutionContextsClearedEvent.cs
index 34a2225..8d4a8b3 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Runtime/ExecutionContextsClearedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Runtime/ExecutionContextsClearedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Runtime
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Runtime/GetEventListenersCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Runtime/GetEventListenersCommand.cs
index dbd6756..ca02539 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Runtime/GetEventListenersCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Runtime/GetEventListenersCommand.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Runtime
 		/// <summary>
 		/// Gets or sets Symbolic group name for handler value. Handler value is not returned without this parameter specified.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ObjectGroup { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Runtime/GetPropertiesCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Runtime/GetPropertiesCommand.cs
index 23f779d..e7634cf 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Runtime/GetPropertiesCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Runtime/GetPropertiesCommand.cs
@@ -18,14 +18,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Runtime
 		/// <summary>
 		/// Gets or sets If true, returns properties belonging only to the element itself, not to its prototype chain.
 		/// </summary>
-		public bool OwnProperties { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? OwnProperties { get; set; }
 		/// <summary>
 		/// Gets or sets If true, returns accessor properties (with getter/setter) only; internal properties are not returned either.
 		/// </summary>
-		public bool AccessorPropertiesOnly { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? AccessorPropertiesOnly { get; set; }
 		/// <summary>
 		/// Gets or sets Whether preview should be generated for the results.
 		/// </summary>
-		public bool GeneratePreview { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? GeneratePreview { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Runtime/GetPropertiesCommandResponse.cs b/source/ChromeDevTools/Protocol/Chrome/Runtime/GetPropertiesCommandResponse.cs
index da60a09..3d00786 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Runtime/GetPropertiesCommandResponse.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Runtime/GetPropertiesCommandResponse.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Runtime
 		/// <summary>
 		/// Gets or sets Internal object properties (only of the element itself).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public InternalPropertyDescriptor[] InternalProperties { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Runtime/InternalPropertyDescriptor.cs b/source/ChromeDevTools/Protocol/Chrome/Runtime/InternalPropertyDescriptor.cs
index ed72412..4dbea48 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Runtime/InternalPropertyDescriptor.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Runtime/InternalPropertyDescriptor.cs
@@ -17,6 +17,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Runtime
 		/// <summary>
 		/// Gets or sets The value associated with the property.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RemoteObject Value { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Runtime/ObjectPreview.cs b/source/ChromeDevTools/Protocol/Chrome/Runtime/ObjectPreview.cs
index d02d520..03a64ea 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Runtime/ObjectPreview.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Runtime/ObjectPreview.cs
@@ -17,10 +17,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Runtime
 		/// <summary>
 		/// Gets or sets Object subtype hint. Specified for <code>object</code> type values only.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Subtype { get; set; }
 		/// <summary>
 		/// Gets or sets String representation of the object.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Description { get; set; }
 		/// <summary>
 		/// Gets or sets Determines whether preview is lossless (contains all information of the original object).
@@ -37,6 +39,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Runtime
 		/// <summary>
 		/// Gets or sets List of the entries. Specified for <code>map</code> and <code>set</code> subtype values only.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public EntryPreview[] Entries { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Runtime/PropertyDescriptor.cs b/source/ChromeDevTools/Protocol/Chrome/Runtime/PropertyDescriptor.cs
index 21cb823..cadf645 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Runtime/PropertyDescriptor.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Runtime/PropertyDescriptor.cs
@@ -17,18 +17,22 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Runtime
 		/// <summary>
 		/// Gets or sets The value associated with the property.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RemoteObject Value { get; set; }
 		/// <summary>
 		/// Gets or sets True if the value associated with the property may be changed (data descriptors only).
 		/// </summary>
-		public bool Writable { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Writable { get; set; }
 		/// <summary>
 		/// Gets or sets A function which serves as a getter for the property, or <code>undefined</code> if there is no getter (accessor descriptors only).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RemoteObject Get { get; set; }
 		/// <summary>
 		/// Gets or sets A function which serves as a setter for the property, or <code>undefined</code> if there is no setter (accessor descriptors only).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RemoteObject Set { get; set; }
 		/// <summary>
 		/// Gets or sets True if the type of this property descriptor may be changed and if the property may be deleted from the corresponding object.
@@ -41,14 +45,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Runtime
 		/// <summary>
 		/// Gets or sets True if the result was thrown during the evaluation.
 		/// </summary>
-		public bool WasThrown { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? WasThrown { get; set; }
 		/// <summary>
 		/// Gets or sets True if the property is owned for the object.
 		/// </summary>
-		public bool IsOwn { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IsOwn { get; set; }
 		/// <summary>
 		/// Gets or sets Property symbol object, if the property is of the <code>symbol</code> type.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RemoteObject Symbol { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Runtime/PropertyPreview.cs b/source/ChromeDevTools/Protocol/Chrome/Runtime/PropertyPreview.cs
index 15c562a..c48da64 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Runtime/PropertyPreview.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Runtime/PropertyPreview.cs
@@ -21,14 +21,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Runtime
 		/// <summary>
 		/// Gets or sets User-friendly property value string.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Value { get; set; }
 		/// <summary>
 		/// Gets or sets Nested value preview.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public ObjectPreview ValuePreview { get; set; }
 		/// <summary>
 		/// Gets or sets Object subtype hint. Specified for <code>object</code> type values only.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Subtype { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Runtime/RemoteObject.cs b/source/ChromeDevTools/Protocol/Chrome/Runtime/RemoteObject.cs
index ca59914..52e81f0 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Runtime/RemoteObject.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Runtime/RemoteObject.cs
@@ -17,30 +17,37 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Runtime
 		/// <summary>
 		/// Gets or sets Object subtype hint. Specified for <code>object</code> type values only.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Subtype { get; set; }
 		/// <summary>
 		/// Gets or sets Object class (constructor) name. Specified for <code>object</code> type values only.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ClassName { get; set; }
 		/// <summary>
 		/// Gets or sets Remote object value in case of primitive values or JSON values (if it was requested), or description string if the value can not be JSON-stringified (like NaN, Infinity, -Infinity, -0).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public object Value { get; set; }
 		/// <summary>
 		/// Gets or sets String representation of the object.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Description { get; set; }
 		/// <summary>
 		/// Gets or sets Unique object identifier (for non-primitive values).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ObjectId { get; set; }
 		/// <summary>
 		/// Gets or sets Preview containing abbreviated property values. Specified for <code>object</code> type values only.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public ObjectPreview Preview { get; set; }
 		/// <summary>
 		/// Gets or sets CustomPreview
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public CustomPreview CustomPreview { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/DebugOnStartUpdatedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/DebugOnStartUpdatedEvent.cs
index d92dda4..bd15879 100644
--- a/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/DebugOnStartUpdatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/DebugOnStartUpdatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.ServiceWorker
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/DispatchMessageEvent.cs b/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/DispatchMessageEvent.cs
index 5bf2789..7cf42ac 100644
--- a/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/DispatchMessageEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/DispatchMessageEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.ServiceWorker
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/ServiceWorkerRegistration.cs b/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/ServiceWorkerRegistration.cs
index e024109..2d2df74 100644
--- a/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/ServiceWorkerRegistration.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/ServiceWorkerRegistration.cs
@@ -21,6 +21,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.ServiceWorker
 		/// <summary>
 		/// Gets or sets IsDeleted
 		/// </summary>
-		public bool IsDeleted { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IsDeleted { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/ServiceWorkerVersion.cs b/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/ServiceWorkerVersion.cs
index ce7b3f0..5e55a24 100644
--- a/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/ServiceWorkerVersion.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/ServiceWorkerVersion.cs
@@ -33,10 +33,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.ServiceWorker
 		/// <summary>
 		/// Gets or sets The Last-Modified header value of the main script.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double ScriptLastModified { get; set; }
 		/// <summary>
 		/// Gets or sets The time at which the response headers of the main script were received from the server.  For cached script it is the last time the cache entry was validated.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double ScriptResponseTime { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/WorkerCreatedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/WorkerCreatedEvent.cs
index 1fd1079..d1395f1 100644
--- a/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/WorkerCreatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/WorkerCreatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.ServiceWorker
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/WorkerErrorReportedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/WorkerErrorReportedEvent.cs
index 9b197a1..592c4ea 100644
--- a/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/WorkerErrorReportedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/WorkerErrorReportedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.ServiceWorker
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/WorkerRegistrationUpdatedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/WorkerRegistrationUpdatedEvent.cs
index de092ce..aa89ac8 100644
--- a/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/WorkerRegistrationUpdatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/WorkerRegistrationUpdatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.ServiceWorker
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/WorkerTerminatedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/WorkerTerminatedEvent.cs
index ba8d6ee..641e6c8 100644
--- a/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/WorkerTerminatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/WorkerTerminatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.ServiceWorker
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/WorkerVersionUpdatedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/WorkerVersionUpdatedEvent.cs
index 9d52bc5..3aec55e 100644
--- a/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/WorkerVersionUpdatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/ServiceWorker/WorkerVersionUpdatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.ServiceWorker
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Timeline/EventRecordedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Timeline/EventRecordedEvent.cs
index 072f0b2..ec6936c 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Timeline/EventRecordedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Timeline/EventRecordedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Timeline
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Timeline/StartCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Timeline/StartCommand.cs
index 5839d0e..888b9a9 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Timeline/StartCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Timeline/StartCommand.cs
@@ -14,22 +14,27 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Timeline
 		/// <summary>
 		/// Gets or sets Samples JavaScript stack traces up to <code>maxCallStackDepth</code>, defaults to 5.
 		/// </summary>
-		public long MaxCallStackDepth { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? MaxCallStackDepth { get; set; }
 		/// <summary>
 		/// Gets or sets Whether instrumentation events should be buffered and returned upon <code>stop</code> call.
 		/// </summary>
-		public bool BufferEvents { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? BufferEvents { get; set; }
 		/// <summary>
 		/// Gets or sets Coma separated event types to issue although bufferEvents is set.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string LiveEvents { get; set; }
 		/// <summary>
 		/// Gets or sets Whether counters data should be included into timeline events.
 		/// </summary>
-		public bool IncludeCounters { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IncludeCounters { get; set; }
 		/// <summary>
 		/// Gets or sets Whether events from GPU process should be collected.
 		/// </summary>
-		public bool IncludeGPUEvents { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IncludeGPUEvents { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Timeline/TimelineEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Timeline/TimelineEvent.cs
index 5b704b8..e1118e1 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Timeline/TimelineEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Timeline/TimelineEvent.cs
@@ -25,22 +25,27 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Timeline
 		/// <summary>
 		/// Gets or sets End time.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double EndTime { get; set; }
 		/// <summary>
 		/// Gets or sets Nested records.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public TimelineEvent[] Children { get; set; }
 		/// <summary>
 		/// Gets or sets If present, identifies the thread that produced the event.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Thread { get; set; }
 		/// <summary>
 		/// Gets or sets Stack trace.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Console.CallFrame[] StackTrace { get; set; }
 		/// <summary>
 		/// Gets or sets Unique identifier of the frame within the page that the event relates to.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string FrameId { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Tracing/BufferUsageEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Tracing/BufferUsageEvent.cs
index d29bfc9..3fedd1b 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Tracing/BufferUsageEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Tracing/BufferUsageEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Tracing
 {
@@ -9,14 +9,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Tracing
 		/// <summary>
 		/// Gets or sets A number in range [0..1] that indicates the used size of event buffer as a fraction of its total size.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double PercentFull { get; set; }
 		/// <summary>
 		/// Gets or sets An approximate number of events in the trace log.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double EventCount { get; set; }
 		/// <summary>
 		/// Gets or sets A number in range [0..1] that indicates the used size of event buffer as a fraction of its total size.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double Value { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Tracing/DataCollectedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Tracing/DataCollectedEvent.cs
index e73fc2e..884b630 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Tracing/DataCollectedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Tracing/DataCollectedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Tracing
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Tracing/StartCommand.cs b/source/ChromeDevTools/Protocol/Chrome/Tracing/StartCommand.cs
index 25f092b..ff570e9 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Tracing/StartCommand.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Tracing/StartCommand.cs
@@ -14,14 +14,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Tracing
 		/// <summary>
 		/// Gets or sets Category/tag filter
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Categories { get; set; }
 		/// <summary>
 		/// Gets or sets Tracing options
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Options { get; set; }
 		/// <summary>
 		/// Gets or sets If set, the agent will issue bufferUsage events at this interval, specified in milliseconds
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double BufferUsageReportingInterval { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/Chrome/Tracing/TracingCompleteEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Tracing/TracingCompleteEvent.cs
index c6a1237..eddff6a 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Tracing/TracingCompleteEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Tracing/TracingCompleteEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Tracing
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Worker/DispatchMessageFromWorkerEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Worker/DispatchMessageFromWorkerEvent.cs
index 1a76c64..441d9ba 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Worker/DispatchMessageFromWorkerEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Worker/DispatchMessageFromWorkerEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Worker
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Worker/WorkerCreatedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Worker/WorkerCreatedEvent.cs
index c868117..54811ed 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Worker/WorkerCreatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Worker/WorkerCreatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Worker
 {
diff --git a/source/ChromeDevTools/Protocol/Chrome/Worker/WorkerTerminatedEvent.cs b/source/ChromeDevTools/Protocol/Chrome/Worker/WorkerTerminatedEvent.cs
index 7f688c0..9f94c83 100644
--- a/source/ChromeDevTools/Protocol/Chrome/Worker/WorkerTerminatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/Chrome/Worker/WorkerTerminatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.Chrome.Worker
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/ApplicationCache/ApplicationCacheStatusUpdatedEvent.cs b/source/ChromeDevTools/Protocol/iOS/ApplicationCache/ApplicationCacheStatusUpdatedEvent.cs
index ed193a1..4ee381a 100644
--- a/source/ChromeDevTools/Protocol/iOS/ApplicationCache/ApplicationCacheStatusUpdatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/ApplicationCache/ApplicationCacheStatusUpdatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.ApplicationCache
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/ApplicationCache/NetworkStateUpdatedEvent.cs b/source/ChromeDevTools/Protocol/iOS/ApplicationCache/NetworkStateUpdatedEvent.cs
index 1c77716..9e72267 100644
--- a/source/ChromeDevTools/Protocol/iOS/ApplicationCache/NetworkStateUpdatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/ApplicationCache/NetworkStateUpdatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.ApplicationCache
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/CSS/CSSMedia.cs b/source/ChromeDevTools/Protocol/iOS/CSS/CSSMedia.cs
index 576fdc1..4f5483f 100644
--- a/source/ChromeDevTools/Protocol/iOS/CSS/CSSMedia.cs
+++ b/source/ChromeDevTools/Protocol/iOS/CSS/CSSMedia.cs
@@ -21,10 +21,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.CSS
 		/// <summary>
 		/// Gets or sets URL of the document containing the media query description.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string SourceURL { get; set; }
 		/// <summary>
 		/// Gets or sets Line in the document containing the media query (not defined for the "stylesheet" source).
 		/// </summary>
-		public long SourceLine { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? SourceLine { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/CSS/CSSProperty.cs b/source/ChromeDevTools/Protocol/iOS/CSS/CSSProperty.cs
index a8568c5..9141089 100644
--- a/source/ChromeDevTools/Protocol/iOS/CSS/CSSProperty.cs
+++ b/source/ChromeDevTools/Protocol/iOS/CSS/CSSProperty.cs
@@ -21,26 +21,32 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.CSS
 		/// <summary>
 		/// Gets or sets The property priority (implies "" if absent).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Priority { get; set; }
 		/// <summary>
 		/// Gets or sets Whether the property is implicit (implies <code>false</code> if absent).
 		/// </summary>
-		public bool Implicit { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Implicit { get; set; }
 		/// <summary>
 		/// Gets or sets The full property text as specified in the style.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Text { get; set; }
 		/// <summary>
 		/// Gets or sets Whether the property is understood by the browser (implies <code>true</code> if absent).
 		/// </summary>
-		public bool ParsedOk { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? ParsedOk { get; set; }
 		/// <summary>
 		/// Gets or sets Whether the property is active or disabled.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public CSSPropertyStatus Status { get; set; }
 		/// <summary>
 		/// Gets or sets The entire property range in the enclosing style declaration (if available).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public SourceRange Range { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/CSS/CSSPropertyInfo.cs b/source/ChromeDevTools/Protocol/iOS/CSS/CSSPropertyInfo.cs
index e8ca9de..43fcd62 100644
--- a/source/ChromeDevTools/Protocol/iOS/CSS/CSSPropertyInfo.cs
+++ b/source/ChromeDevTools/Protocol/iOS/CSS/CSSPropertyInfo.cs
@@ -17,10 +17,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.CSS
 		/// <summary>
 		/// Gets or sets Longhand property names.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string[] Longhands { get; set; }
 		/// <summary>
 		/// Gets or sets Supported values for this property.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string[] Values { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/CSS/CSSRule.cs b/source/ChromeDevTools/Protocol/iOS/CSS/CSSRule.cs
index 57a31e6..7a3d29d 100644
--- a/source/ChromeDevTools/Protocol/iOS/CSS/CSSRule.cs
+++ b/source/ChromeDevTools/Protocol/iOS/CSS/CSSRule.cs
@@ -13,6 +13,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.CSS
 		/// <summary>
 		/// Gets or sets The CSS rule identifier (absent for user agent stylesheet and user-specified stylesheet rules).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public CSSRuleId RuleId { get; set; }
 		/// <summary>
 		/// Gets or sets Rule selector data.
@@ -21,6 +22,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.CSS
 		/// <summary>
 		/// Gets or sets Parent stylesheet resource URL (for regular rules).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string SourceURL { get; set; }
 		/// <summary>
 		/// Gets or sets Line ordinal of the rule selector start character in the resource.
@@ -37,6 +39,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.CSS
 		/// <summary>
 		/// Gets or sets Media list array (for rules involving media queries). The array enumerates media queries starting with the innermost one, going outwards.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public CSSMedia[] Media { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/CSS/CSSSelector.cs b/source/ChromeDevTools/Protocol/iOS/CSS/CSSSelector.cs
index 0c08b7a..393f0a6 100644
--- a/source/ChromeDevTools/Protocol/iOS/CSS/CSSSelector.cs
+++ b/source/ChromeDevTools/Protocol/iOS/CSS/CSSSelector.cs
@@ -17,10 +17,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.CSS
 		/// <summary>
 		/// Gets or sets Specificity (a, b, c) tuple. Included if the selector is sent in response to CSS.getMatchedStylesForNode which provides a context element.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public long[] Specificity { get; set; }
 		/// <summary>
 		/// Gets or sets Whether or not the specificity can be dynamic. Included if the selector is sent in response to CSS.getMatchedStylesForNode which provides a context element.
 		/// </summary>
-		public bool Dynamic { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Dynamic { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/CSS/CSSStyle.cs b/source/ChromeDevTools/Protocol/iOS/CSS/CSSStyle.cs
index d98a952..da2c2cb 100644
--- a/source/ChromeDevTools/Protocol/iOS/CSS/CSSStyle.cs
+++ b/source/ChromeDevTools/Protocol/iOS/CSS/CSSStyle.cs
@@ -13,6 +13,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.CSS
 		/// <summary>
 		/// Gets or sets The CSS style identifier (absent for attribute styles).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public CSSStyleId StyleId { get; set; }
 		/// <summary>
 		/// Gets or sets CSS properties in the style.
@@ -25,18 +26,22 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.CSS
 		/// <summary>
 		/// Gets or sets Style declaration text (if available).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string CssText { get; set; }
 		/// <summary>
 		/// Gets or sets Style declaration range in the enclosing stylesheet (if available).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public SourceRange Range { get; set; }
 		/// <summary>
 		/// Gets or sets The effective "width" property value from this style.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Width { get; set; }
 		/// <summary>
 		/// Gets or sets The effective "height" property value from this style.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Height { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/CSS/CSSStyleSheetBody.cs b/source/ChromeDevTools/Protocol/iOS/CSS/CSSStyleSheetBody.cs
index 2854406..55e3015 100644
--- a/source/ChromeDevTools/Protocol/iOS/CSS/CSSStyleSheetBody.cs
+++ b/source/ChromeDevTools/Protocol/iOS/CSS/CSSStyleSheetBody.cs
@@ -21,6 +21,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.CSS
 		/// <summary>
 		/// Gets or sets Stylesheet resource contents (if available).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Text { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/CSS/GetInlineStylesForNodeCommandResponse.cs b/source/ChromeDevTools/Protocol/iOS/CSS/GetInlineStylesForNodeCommandResponse.cs
index bf4e791..85f3dec 100644
--- a/source/ChromeDevTools/Protocol/iOS/CSS/GetInlineStylesForNodeCommandResponse.cs
+++ b/source/ChromeDevTools/Protocol/iOS/CSS/GetInlineStylesForNodeCommandResponse.cs
@@ -14,10 +14,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.CSS
 		/// <summary>
 		/// Gets or sets Inline style for the specified DOM node.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public CSSStyle InlineStyle { get; set; }
 		/// <summary>
 		/// Gets or sets Attribute-defined element style (e.g. resulting from "width=20 height=100%").
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public CSSStyle AttributesStyle { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/CSS/GetMatchedStylesForNodeCommand.cs b/source/ChromeDevTools/Protocol/iOS/CSS/GetMatchedStylesForNodeCommand.cs
index 262dc8e..b2734bd 100644
--- a/source/ChromeDevTools/Protocol/iOS/CSS/GetMatchedStylesForNodeCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/CSS/GetMatchedStylesForNodeCommand.cs
@@ -18,10 +18,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.CSS
 		/// <summary>
 		/// Gets or sets Whether to include pseudo styles (default: true).
 		/// </summary>
-		public bool IncludePseudo { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IncludePseudo { get; set; }
 		/// <summary>
 		/// Gets or sets Whether to include inherited styles (default: true).
 		/// </summary>
-		public bool IncludeInherited { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IncludeInherited { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/CSS/GetMatchedStylesForNodeCommandResponse.cs b/source/ChromeDevTools/Protocol/iOS/CSS/GetMatchedStylesForNodeCommandResponse.cs
index d5fb72b..782e45c 100644
--- a/source/ChromeDevTools/Protocol/iOS/CSS/GetMatchedStylesForNodeCommandResponse.cs
+++ b/source/ChromeDevTools/Protocol/iOS/CSS/GetMatchedStylesForNodeCommandResponse.cs
@@ -14,14 +14,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.CSS
 		/// <summary>
 		/// Gets or sets CSS rules matching this node, from all applicable stylesheets.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RuleMatch[] MatchedCSSRules { get; set; }
 		/// <summary>
 		/// Gets or sets Pseudo style matches for this node.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public PseudoIdMatches[] PseudoElements { get; set; }
 		/// <summary>
 		/// Gets or sets A chain of inherited styles (from the immediate node parent up to the DOM tree root).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public InheritedStyleEntry[] Inherited { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/CSS/InheritedStyleEntry.cs b/source/ChromeDevTools/Protocol/iOS/CSS/InheritedStyleEntry.cs
index 1b70ec9..4a08541 100644
--- a/source/ChromeDevTools/Protocol/iOS/CSS/InheritedStyleEntry.cs
+++ b/source/ChromeDevTools/Protocol/iOS/CSS/InheritedStyleEntry.cs
@@ -13,6 +13,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.CSS
 		/// <summary>
 		/// Gets or sets The ancestor node's inline style, if any, in the style inheritance chain.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public CSSStyle InlineStyle { get; set; }
 		/// <summary>
 		/// Gets or sets Matches of CSS rules matching the ancestor node in the style inheritance chain.
diff --git a/source/ChromeDevTools/Protocol/iOS/CSS/MediaQueryResultChangedEvent.cs b/source/ChromeDevTools/Protocol/iOS/CSS/MediaQueryResultChangedEvent.cs
index 50ab2fa..292ebbe 100644
--- a/source/ChromeDevTools/Protocol/iOS/CSS/MediaQueryResultChangedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/CSS/MediaQueryResultChangedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.CSS
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/CSS/NamedFlowCreatedEvent.cs b/source/ChromeDevTools/Protocol/iOS/CSS/NamedFlowCreatedEvent.cs
index e0a6795..04187f3 100644
--- a/source/ChromeDevTools/Protocol/iOS/CSS/NamedFlowCreatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/CSS/NamedFlowCreatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.CSS
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/CSS/NamedFlowRemovedEvent.cs b/source/ChromeDevTools/Protocol/iOS/CSS/NamedFlowRemovedEvent.cs
index 48f37fe..5215dd8 100644
--- a/source/ChromeDevTools/Protocol/iOS/CSS/NamedFlowRemovedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/CSS/NamedFlowRemovedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.CSS
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/CSS/RegionOversetChangedEvent.cs b/source/ChromeDevTools/Protocol/iOS/CSS/RegionOversetChangedEvent.cs
index 11190fc..3bc0674 100644
--- a/source/ChromeDevTools/Protocol/iOS/CSS/RegionOversetChangedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/CSS/RegionOversetChangedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.CSS
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/CSS/RegisteredNamedFlowContentElementEvent.cs b/source/ChromeDevTools/Protocol/iOS/CSS/RegisteredNamedFlowContentElementEvent.cs
index 65a956d..79549f4 100644
--- a/source/ChromeDevTools/Protocol/iOS/CSS/RegisteredNamedFlowContentElementEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/CSS/RegisteredNamedFlowContentElementEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.CSS
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/CSS/SelectorList.cs b/source/ChromeDevTools/Protocol/iOS/CSS/SelectorList.cs
index eb582c4..5b780e3 100644
--- a/source/ChromeDevTools/Protocol/iOS/CSS/SelectorList.cs
+++ b/source/ChromeDevTools/Protocol/iOS/CSS/SelectorList.cs
@@ -21,6 +21,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.CSS
 		/// <summary>
 		/// Gets or sets Rule selector range in the underlying resource (if available).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public SourceRange Range { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/CSS/StyleSheetAddedEvent.cs b/source/ChromeDevTools/Protocol/iOS/CSS/StyleSheetAddedEvent.cs
index a3c9e0b..633ed6f 100644
--- a/source/ChromeDevTools/Protocol/iOS/CSS/StyleSheetAddedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/CSS/StyleSheetAddedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.CSS
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/CSS/StyleSheetChangedEvent.cs b/source/ChromeDevTools/Protocol/iOS/CSS/StyleSheetChangedEvent.cs
index 5d56d31..af1a6d1 100644
--- a/source/ChromeDevTools/Protocol/iOS/CSS/StyleSheetChangedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/CSS/StyleSheetChangedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.CSS
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/CSS/StyleSheetRemovedEvent.cs b/source/ChromeDevTools/Protocol/iOS/CSS/StyleSheetRemovedEvent.cs
index 720e699..4848075 100644
--- a/source/ChromeDevTools/Protocol/iOS/CSS/StyleSheetRemovedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/CSS/StyleSheetRemovedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.CSS
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/CSS/UnregisteredNamedFlowContentElementEvent.cs b/source/ChromeDevTools/Protocol/iOS/CSS/UnregisteredNamedFlowContentElementEvent.cs
index 19d407c..dc26cb1 100644
--- a/source/ChromeDevTools/Protocol/iOS/CSS/UnregisteredNamedFlowContentElementEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/CSS/UnregisteredNamedFlowContentElementEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.CSS
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Console/ConsoleMessage.cs b/source/ChromeDevTools/Protocol/iOS/Console/ConsoleMessage.cs
index 1c653bc..f53c693 100644
--- a/source/ChromeDevTools/Protocol/iOS/Console/ConsoleMessage.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Console/ConsoleMessage.cs
@@ -25,34 +25,42 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Console
 		/// <summary>
 		/// Gets or sets Console message type.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Type { get; set; }
 		/// <summary>
 		/// Gets or sets URL of the message origin.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Url { get; set; }
 		/// <summary>
 		/// Gets or sets Line number in the resource that generated this message.
 		/// </summary>
-		public long Line { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? Line { get; set; }
 		/// <summary>
 		/// Gets or sets Column number on the line in the resource that generated this message.
 		/// </summary>
-		public long Column { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? Column { get; set; }
 		/// <summary>
 		/// Gets or sets Repeat count for repeated messages.
 		/// </summary>
-		public long RepeatCount { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? RepeatCount { get; set; }
 		/// <summary>
 		/// Gets or sets Message parameters in case of the formatted message.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Runtime.RemoteObject[] Parameters { get; set; }
 		/// <summary>
 		/// Gets or sets JavaScript stack trace for assertions and error messages.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public CallFrame[] StackTrace { get; set; }
 		/// <summary>
 		/// Gets or sets Identifier of the network request associated with this message.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string NetworkRequestId { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Console/MessageAddedEvent.cs b/source/ChromeDevTools/Protocol/iOS/Console/MessageAddedEvent.cs
index 3968fb7..00353df 100644
--- a/source/ChromeDevTools/Protocol/iOS/Console/MessageAddedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Console/MessageAddedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Console
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Console/MessageRepeatCountUpdatedEvent.cs b/source/ChromeDevTools/Protocol/iOS/Console/MessageRepeatCountUpdatedEvent.cs
index 02308be..e71d794 100644
--- a/source/ChromeDevTools/Protocol/iOS/Console/MessageRepeatCountUpdatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Console/MessageRepeatCountUpdatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Console
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Console/MessagesClearedEvent.cs b/source/ChromeDevTools/Protocol/iOS/Console/MessagesClearedEvent.cs
index a6a0062..a75d201 100644
--- a/source/ChromeDevTools/Protocol/iOS/Console/MessagesClearedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Console/MessagesClearedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Console
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/AccessibilityProperties.cs b/source/ChromeDevTools/Protocol/iOS/DOM/AccessibilityProperties.cs
index b3ecf73..e2c717d 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/AccessibilityProperties.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/AccessibilityProperties.cs
@@ -13,27 +13,33 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 		/// <summary>
 		/// Gets or sets <code>DOMNode</code> id of the accessibility object referenced by aria-activedescendant.
 		/// </summary>
-		public long ActiveDescendantNodeId { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? ActiveDescendantNodeId { get; set; }
 		/// <summary>
 		/// Gets or sets Value of @aria-busy on current or ancestor node.
 		/// </summary>
-		public bool Busy { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Busy { get; set; }
 		/// <summary>
 		/// Gets or sets Checked state of certain form controls.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Checked { get; set; }
 		/// <summary>
 		/// Gets or sets Array of <code>DOMNode</code> ids of the accessibility tree children if available.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public long[] ChildNodeIds { get; set; }
 		/// <summary>
 		/// Gets or sets Array of <code>DOMNode</code> ids of any nodes referenced via @aria-controls.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public long[] ControlledNodeIds { get; set; }
 		/// <summary>
 		/// Gets or sets Disabled state of form controls.
 		/// </summary>
-		public bool Disabled { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Disabled { get; set; }
 		/// <summary>
 		/// Gets or sets Indicates whether there is an existing AX object for the DOM node. If this is false, all the other properties will be default values.
 		/// </summary>
@@ -41,31 +47,38 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 		/// <summary>
 		/// Gets or sets Expanded state.
 		/// </summary>
-		public bool Expanded { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Expanded { get; set; }
 		/// <summary>
 		/// Gets or sets Array of <code>DOMNode</code> ids of any nodes referenced via @aria-flowto.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public long[] FlowedNodeIds { get; set; }
 		/// <summary>
 		/// Gets or sets Focused state. Only defined on focusable elements.
 		/// </summary>
-		public bool Focused { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Focused { get; set; }
 		/// <summary>
 		/// Gets or sets Indicates whether the accessibility of the associated AX object node is ignored, whether heuristically or explicitly.
 		/// </summary>
-		public bool Ignored { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Ignored { get; set; }
 		/// <summary>
 		/// Gets or sets State indicating whether the accessibility of the associated AX object node is ignored by default for node type.
 		/// </summary>
-		public bool IgnoredByDefault { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IgnoredByDefault { get; set; }
 		/// <summary>
 		/// Gets or sets Invalid status of form controls.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Invalid { get; set; }
 		/// <summary>
 		/// Gets or sets Hidden state. True if node or an ancestor is hidden via CSS or explicit @aria-hidden, to clarify why the element is ignored.
 		/// </summary>
-		public bool Hidden { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Hidden { get; set; }
 		/// <summary>
 		/// Gets or sets Computed label value for the node, sometimes calculated by referencing other nodes.
 		/// </summary>
@@ -73,19 +86,23 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 		/// <summary>
 		/// Gets or sets Value of @aria-atomic.
 		/// </summary>
-		public bool LiveRegionAtomic { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? LiveRegionAtomic { get; set; }
 		/// <summary>
 		/// Gets or sets Token value(s) of element's @aria-relevant attribute. Array of string values matching $ref LiveRegionRelevant. FIXME: Enum values blocked by http://webkit.org/b/133711
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string[] LiveRegionRelevant { get; set; }
 		/// <summary>
 		/// Gets or sets Value of element's @aria-live attribute.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string LiveRegionStatus { get; set; }
 		/// <summary>
 		/// Gets or sets <code>DOMNode</code> id of node or closest ancestor node that has a mousedown, mouseup, or click event handler.
 		/// </summary>
-		public long MouseEventNodeId { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? MouseEventNodeId { get; set; }
 		/// <summary>
 		/// Gets or sets Target <code>DOMNode</code> id.
 		/// </summary>
@@ -93,23 +110,28 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 		/// <summary>
 		/// Gets or sets Array of <code>DOMNode</code> ids of any nodes referenced via @aria-owns.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public long[] OwnedNodeIds { get; set; }
 		/// <summary>
 		/// Gets or sets <code>DOMNode</code> id of the accessibility tree parent object if available.
 		/// </summary>
-		public long ParentNodeId { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? ParentNodeId { get; set; }
 		/// <summary>
 		/// Gets or sets Pressed state for toggle buttons.
 		/// </summary>
-		public bool Pressed { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Pressed { get; set; }
 		/// <summary>
 		/// Gets or sets Readonly state of text controls.
 		/// </summary>
-		public bool Readonly { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Readonly { get; set; }
 		/// <summary>
 		/// Gets or sets Required state of form controls.
 		/// </summary>
-		public bool Required { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Required { get; set; }
 		/// <summary>
 		/// Gets or sets Computed value for first recognized role token, default role per element, or overridden role.
 		/// </summary>
@@ -117,10 +139,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 		/// <summary>
 		/// Gets or sets Selected state of certain form controls.
 		/// </summary>
-		public bool Selected { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Selected { get; set; }
 		/// <summary>
 		/// Gets or sets Array of <code>DOMNode</code> ids of any children marked as selected.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public long[] SelectedChildNodeIds { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/AttributeModifiedEvent.cs b/source/ChromeDevTools/Protocol/iOS/DOM/AttributeModifiedEvent.cs
index c0c54da..88a039f 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/AttributeModifiedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/AttributeModifiedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/AttributeRemovedEvent.cs b/source/ChromeDevTools/Protocol/iOS/DOM/AttributeRemovedEvent.cs
index 5945bc4..020b5f4 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/AttributeRemovedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/AttributeRemovedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/CharacterDataModifiedEvent.cs b/source/ChromeDevTools/Protocol/iOS/DOM/CharacterDataModifiedEvent.cs
index fe4c903..d46030b 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/CharacterDataModifiedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/CharacterDataModifiedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/ChildNodeCountUpdatedEvent.cs b/source/ChromeDevTools/Protocol/iOS/DOM/ChildNodeCountUpdatedEvent.cs
index 5e9626f..b6662bb 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/ChildNodeCountUpdatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/ChildNodeCountUpdatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/ChildNodeInsertedEvent.cs b/source/ChromeDevTools/Protocol/iOS/DOM/ChildNodeInsertedEvent.cs
index 08315e1..798cb12 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/ChildNodeInsertedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/ChildNodeInsertedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/ChildNodeRemovedEvent.cs b/source/ChromeDevTools/Protocol/iOS/DOM/ChildNodeRemovedEvent.cs
index fd9a054..afc8b70 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/ChildNodeRemovedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/ChildNodeRemovedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/DocumentUpdatedEvent.cs b/source/ChromeDevTools/Protocol/iOS/DOM/DocumentUpdatedEvent.cs
index 10ccd70..0754fc6 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/DocumentUpdatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/DocumentUpdatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/EventListener.cs b/source/ChromeDevTools/Protocol/iOS/DOM/EventListener.cs
index 6e769a3..b41c461 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/EventListener.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/EventListener.cs
@@ -33,14 +33,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 		/// <summary>
 		/// Gets or sets Handler code location.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Debugger.Location Location { get; set; }
 		/// <summary>
 		/// Gets or sets Source script URL.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string SourceName { get; set; }
 		/// <summary>
 		/// Gets or sets Event handler function value.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Runtime.RemoteObject Handler { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/GetEventListenersForNodeCommand.cs b/source/ChromeDevTools/Protocol/iOS/DOM/GetEventListenersForNodeCommand.cs
index b5a6111..e8bfefa 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/GetEventListenersForNodeCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/GetEventListenersForNodeCommand.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 		/// <summary>
 		/// Gets or sets Symbolic group name for handler value. Handler value is not returned without this parameter specified.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ObjectGroup { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/HighlightConfig.cs b/source/ChromeDevTools/Protocol/iOS/DOM/HighlightConfig.cs
index 338336f..8519b2e 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/HighlightConfig.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/HighlightConfig.cs
@@ -13,22 +13,27 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 		/// <summary>
 		/// Gets or sets Whether the node info tooltip should be shown (default: false).
 		/// </summary>
-		public bool ShowInfo { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? ShowInfo { get; set; }
 		/// <summary>
 		/// Gets or sets The content box highlight fill color (default: transparent).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RGBAColor ContentColor { get; set; }
 		/// <summary>
 		/// Gets or sets The padding highlight fill color (default: transparent).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RGBAColor PaddingColor { get; set; }
 		/// <summary>
 		/// Gets or sets The border highlight fill color (default: transparent).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RGBAColor BorderColor { get; set; }
 		/// <summary>
 		/// Gets or sets The margin highlight fill color (default: transparent).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RGBAColor MarginColor { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/HighlightFrameCommand.cs b/source/ChromeDevTools/Protocol/iOS/DOM/HighlightFrameCommand.cs
index a2288fa..139cc8b 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/HighlightFrameCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/HighlightFrameCommand.cs
@@ -18,10 +18,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 		/// <summary>
 		/// Gets or sets The content box highlight fill color (default: transparent).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RGBAColor ContentColor { get; set; }
 		/// <summary>
 		/// Gets or sets The content box highlight outline color (default: transparent).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RGBAColor ContentOutlineColor { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/HighlightNodeCommand.cs b/source/ChromeDevTools/Protocol/iOS/DOM/HighlightNodeCommand.cs
index fc664e6..08e1a96 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/HighlightNodeCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/HighlightNodeCommand.cs
@@ -18,10 +18,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 		/// <summary>
 		/// Gets or sets Identifier of the node to highlight.
 		/// </summary>
-		public long NodeId { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? NodeId { get; set; }
 		/// <summary>
 		/// Gets or sets JavaScript object id of the node to be highlighted.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ObjectId { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/HighlightQuadCommand.cs b/source/ChromeDevTools/Protocol/iOS/DOM/HighlightQuadCommand.cs
index c02c2f7..94d92ba 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/HighlightQuadCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/HighlightQuadCommand.cs
@@ -18,14 +18,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 		/// <summary>
 		/// Gets or sets The highlight fill color (default: transparent).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RGBAColor Color { get; set; }
 		/// <summary>
 		/// Gets or sets The highlight outline color (default: transparent).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RGBAColor OutlineColor { get; set; }
 		/// <summary>
 		/// Gets or sets Indicates whether the provided parameters are in page coordinates or in viewport coordinates (the default).
 		/// </summary>
-		public bool UsePageCoordinates { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? UsePageCoordinates { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/HighlightRectCommand.cs b/source/ChromeDevTools/Protocol/iOS/DOM/HighlightRectCommand.cs
index 16dd9d7..9ef25c6 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/HighlightRectCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/HighlightRectCommand.cs
@@ -30,14 +30,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 		/// <summary>
 		/// Gets or sets The highlight fill color (default: transparent).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RGBAColor Color { get; set; }
 		/// <summary>
 		/// Gets or sets The highlight outline color (default: transparent).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RGBAColor OutlineColor { get; set; }
 		/// <summary>
 		/// Gets or sets Indicates whether the provided parameters are in page coordinates or in viewport coordinates (the default).
 		/// </summary>
-		public bool UsePageCoordinates { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? UsePageCoordinates { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/HighlightSelectorCommand.cs b/source/ChromeDevTools/Protocol/iOS/DOM/HighlightSelectorCommand.cs
index 23e3075..e0c496c 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/HighlightSelectorCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/HighlightSelectorCommand.cs
@@ -22,6 +22,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 		/// <summary>
 		/// Gets or sets Identifier of the frame which will be searched using the selector.  If not provided, the main frame will be used.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string FrameId { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/InlineStyleInvalidatedEvent.cs b/source/ChromeDevTools/Protocol/iOS/DOM/InlineStyleInvalidatedEvent.cs
index ffbfd6a..404e89b 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/InlineStyleInvalidatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/InlineStyleInvalidatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/MoveToCommand.cs b/source/ChromeDevTools/Protocol/iOS/DOM/MoveToCommand.cs
index be8c71b..e3777a6 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/MoveToCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/MoveToCommand.cs
@@ -22,6 +22,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 		/// <summary>
 		/// Gets or sets Drop node before given one.
 		/// </summary>
-		public long InsertBeforeNodeId { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? InsertBeforeNodeId { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/Node.cs b/source/ChromeDevTools/Protocol/iOS/DOM/Node.cs
index e5505c6..4a33e7c 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/Node.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/Node.cs
@@ -33,74 +33,92 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 		/// <summary>
 		/// Gets or sets Child count for <code>Container</code> nodes.
 		/// </summary>
-		public long ChildNodeCount { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? ChildNodeCount { get; set; }
 		/// <summary>
 		/// Gets or sets Child nodes of this node when requested with children.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Node[] Children { get; set; }
 		/// <summary>
 		/// Gets or sets Attributes of the <code>Element</code> node in the form of flat array <code>[name1, value1, name2, value2]</code>.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string[] Attributes { get; set; }
 		/// <summary>
 		/// Gets or sets Document URL that <code>Document</code> or <code>FrameOwner</code> node points to.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string DocumentURL { get; set; }
 		/// <summary>
 		/// Gets or sets Base URL that <code>Document</code> or <code>FrameOwner</code> node uses for URL completion.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string BaseURL { get; set; }
 		/// <summary>
 		/// Gets or sets <code>DocumentType</code>'s publicId.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string PublicId { get; set; }
 		/// <summary>
 		/// Gets or sets <code>DocumentType</code>'s systemId.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string SystemId { get; set; }
 		/// <summary>
 		/// Gets or sets <code>DocumentType</code>'s internalSubset.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string InternalSubset { get; set; }
 		/// <summary>
 		/// Gets or sets <code>Document</code>'s XML version in case of XML documents.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string XmlVersion { get; set; }
 		/// <summary>
 		/// Gets or sets <code>Attr</code>'s name.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Name { get; set; }
 		/// <summary>
 		/// Gets or sets <code>Attr</code>'s value.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Value { get; set; }
 		/// <summary>
 		/// Gets or sets Pseudo element type for this node.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public PseudoType PseudoType { get; set; }
 		/// <summary>
 		/// Gets or sets Frame ID for frame owner elements.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string FrameId { get; set; }
 		/// <summary>
 		/// Gets or sets Content document for frame owner elements.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Node ContentDocument { get; set; }
 		/// <summary>
 		/// Gets or sets Shadow root list for given element host.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Node[] ShadowRoots { get; set; }
 		/// <summary>
 		/// Gets or sets Content document fragment for template elements
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Node TemplateContent { get; set; }
 		/// <summary>
 		/// Gets or sets Pseudo elements associated with this node.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Node[] PseudoElements { get; set; }
 		/// <summary>
 		/// Gets or sets Computed value for first recognized role token, default role per element, or overridden role.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Role { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/PerformSearchCommand.cs b/source/ChromeDevTools/Protocol/iOS/DOM/PerformSearchCommand.cs
index ac7428d..af028ea 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/PerformSearchCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/PerformSearchCommand.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 		/// <summary>
 		/// Gets or sets Ids of nodes to use as starting points for the search.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public long[] NodeIds { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/PseudoElementAddedEvent.cs b/source/ChromeDevTools/Protocol/iOS/DOM/PseudoElementAddedEvent.cs
index 775ca17..d86098c 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/PseudoElementAddedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/PseudoElementAddedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/PseudoElementRemovedEvent.cs b/source/ChromeDevTools/Protocol/iOS/DOM/PseudoElementRemovedEvent.cs
index 1edd761..d052959 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/PseudoElementRemovedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/PseudoElementRemovedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/RGBAColor.cs b/source/ChromeDevTools/Protocol/iOS/DOM/RGBAColor.cs
index 9d2b82b..f5ff6e4 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/RGBAColor.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/RGBAColor.cs
@@ -25,6 +25,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 		/// <summary>
 		/// Gets or sets The alpha component, in the [0-1] range (default: 1).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double A { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/RequestChildNodesCommand.cs b/source/ChromeDevTools/Protocol/iOS/DOM/RequestChildNodesCommand.cs
index 096ca4c..02a0c25 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/RequestChildNodesCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/RequestChildNodesCommand.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 		/// <summary>
 		/// Gets or sets The maximum depth at which children should be retrieved, defaults to 1. Use -1 for the entire subtree or provide an integer larger than 0.
 		/// </summary>
-		public long Depth { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? Depth { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/ResolveNodeCommand.cs b/source/ChromeDevTools/Protocol/iOS/DOM/ResolveNodeCommand.cs
index 9520d2a..6df9675 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/ResolveNodeCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/ResolveNodeCommand.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 		/// <summary>
 		/// Gets or sets Symbolic group name that can be used to release multiple objects.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ObjectGroup { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/SetAttributesAsTextCommand.cs b/source/ChromeDevTools/Protocol/iOS/DOM/SetAttributesAsTextCommand.cs
index 16e233d..c829a1a 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/SetAttributesAsTextCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/SetAttributesAsTextCommand.cs
@@ -22,6 +22,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 		/// <summary>
 		/// Gets or sets Attribute name to replace with new attributes derived from text in case text parsed successfully.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Name { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/SetChildNodesEvent.cs b/source/ChromeDevTools/Protocol/iOS/DOM/SetChildNodesEvent.cs
index 45f45f7..e4f9e14 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/SetChildNodesEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/SetChildNodesEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/SetInspectModeEnabledCommand.cs b/source/ChromeDevTools/Protocol/iOS/DOM/SetInspectModeEnabledCommand.cs
index ecd9b62..c916d8e 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/SetInspectModeEnabledCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/SetInspectModeEnabledCommand.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 		/// <summary>
 		/// Gets or sets A descriptor for the highlight appearance of hovered-over nodes. May be omitted if <code>enabled == false</code>.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public HighlightConfig HighlightConfig { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/ShadowRootPoppedEvent.cs b/source/ChromeDevTools/Protocol/iOS/DOM/ShadowRootPoppedEvent.cs
index 6a0ebdc..19bbf9a 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/ShadowRootPoppedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/ShadowRootPoppedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/DOM/ShadowRootPushedEvent.cs b/source/ChromeDevTools/Protocol/iOS/DOM/ShadowRootPushedEvent.cs
index 17ea5a8..c3bc653 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOM/ShadowRootPushedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOM/ShadowRootPushedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOM
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/DOMStorage/DomStorageItemAddedEvent.cs b/source/ChromeDevTools/Protocol/iOS/DOMStorage/DomStorageItemAddedEvent.cs
index 5dc5666..ba348ee 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOMStorage/DomStorageItemAddedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOMStorage/DomStorageItemAddedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOMStorage
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/DOMStorage/DomStorageItemRemovedEvent.cs b/source/ChromeDevTools/Protocol/iOS/DOMStorage/DomStorageItemRemovedEvent.cs
index d3f9c32..09615c5 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOMStorage/DomStorageItemRemovedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOMStorage/DomStorageItemRemovedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOMStorage
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/DOMStorage/DomStorageItemUpdatedEvent.cs b/source/ChromeDevTools/Protocol/iOS/DOMStorage/DomStorageItemUpdatedEvent.cs
index 6908e81..5a7cf31 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOMStorage/DomStorageItemUpdatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOMStorage/DomStorageItemUpdatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOMStorage
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/DOMStorage/DomStorageItemsClearedEvent.cs b/source/ChromeDevTools/Protocol/iOS/DOMStorage/DomStorageItemsClearedEvent.cs
index e375bf1..f72f277 100644
--- a/source/ChromeDevTools/Protocol/iOS/DOMStorage/DomStorageItemsClearedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/DOMStorage/DomStorageItemsClearedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.DOMStorage
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Database/AddDatabaseEvent.cs b/source/ChromeDevTools/Protocol/iOS/Database/AddDatabaseEvent.cs
index 9fd587b..5754ba1 100644
--- a/source/ChromeDevTools/Protocol/iOS/Database/AddDatabaseEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Database/AddDatabaseEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Database
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Database/ExecuteSQLCommandResponse.cs b/source/ChromeDevTools/Protocol/iOS/Database/ExecuteSQLCommandResponse.cs
index a6ee3dd..bdee8d3 100644
--- a/source/ChromeDevTools/Protocol/iOS/Database/ExecuteSQLCommandResponse.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Database/ExecuteSQLCommandResponse.cs
@@ -11,14 +11,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Database
 		/// <summary>
 		/// Gets or sets ColumnNames
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string[] ColumnNames { get; set; }
 		/// <summary>
 		/// Gets or sets Values
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public object[] Values { get; set; }
 		/// <summary>
 		/// Gets or sets SqlError
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Error SqlError { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Debugger/AssertPauseReason.cs b/source/ChromeDevTools/Protocol/iOS/Debugger/AssertPauseReason.cs
index eccbd52..c35caca 100644
--- a/source/ChromeDevTools/Protocol/iOS/Debugger/AssertPauseReason.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Debugger/AssertPauseReason.cs
@@ -13,6 +13,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Debugger
 		/// <summary>
 		/// Gets or sets The console.assert message string if provided.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Message { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Debugger/BreakpointAction.cs b/source/ChromeDevTools/Protocol/iOS/Debugger/BreakpointAction.cs
index 57e6a3c..23984f2 100644
--- a/source/ChromeDevTools/Protocol/iOS/Debugger/BreakpointAction.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Debugger/BreakpointAction.cs
@@ -17,10 +17,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Debugger
 		/// <summary>
 		/// Gets or sets Data associated with this breakpoint type (e.g. for type "eval" this is the JavaScript string to evalulate).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Data { get; set; }
 		/// <summary>
 		/// Gets or sets A frontend-assigned identifier for this breakpoint action.
 		/// </summary>
-		public long Id { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? Id { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Debugger/BreakpointOptions.cs b/source/ChromeDevTools/Protocol/iOS/Debugger/BreakpointOptions.cs
index d3decc9..f4b884c 100644
--- a/source/ChromeDevTools/Protocol/iOS/Debugger/BreakpointOptions.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Debugger/BreakpointOptions.cs
@@ -13,18 +13,22 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Debugger
 		/// <summary>
 		/// Gets or sets Expression to use as a breakpoint condition. When specified, debugger will only stop on the breakpoint if this expression evaluates to true.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Condition { get; set; }
 		/// <summary>
 		/// Gets or sets Actions to perform automatically when the breakpoint is triggered.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public BreakpointAction[] Actions { get; set; }
 		/// <summary>
 		/// Gets or sets Automatically continue after hitting this breakpoint and running actions.
 		/// </summary>
-		public bool AutoContinue { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? AutoContinue { get; set; }
 		/// <summary>
 		/// Gets or sets Number of times to ignore this breakpoint, before stopping on the breakpoint and running actions.
 		/// </summary>
-		public long IgnoreCount { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? IgnoreCount { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Debugger/BreakpointResolvedEvent.cs b/source/ChromeDevTools/Protocol/iOS/Debugger/BreakpointResolvedEvent.cs
index 9febbb7..d44cf46 100644
--- a/source/ChromeDevTools/Protocol/iOS/Debugger/BreakpointResolvedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Debugger/BreakpointResolvedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Debugger
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Debugger/DidSampleProbeEvent.cs b/source/ChromeDevTools/Protocol/iOS/Debugger/DidSampleProbeEvent.cs
index b9885ed..3386169 100644
--- a/source/ChromeDevTools/Protocol/iOS/Debugger/DidSampleProbeEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Debugger/DidSampleProbeEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Debugger
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Debugger/EvaluateOnCallFrameCommand.cs b/source/ChromeDevTools/Protocol/iOS/Debugger/EvaluateOnCallFrameCommand.cs
index 789f71c..175c8d2 100644
--- a/source/ChromeDevTools/Protocol/iOS/Debugger/EvaluateOnCallFrameCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Debugger/EvaluateOnCallFrameCommand.cs
@@ -22,26 +22,32 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Debugger
 		/// <summary>
 		/// Gets or sets String object group name to put result into (allows rapid releasing resulting object handles using <code>releaseObjectGroup</code>).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ObjectGroup { get; set; }
 		/// <summary>
 		/// Gets or sets Specifies whether command line API should be available to the evaluated expression, defaults to false.
 		/// </summary>
-		public bool IncludeCommandLineAPI { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IncludeCommandLineAPI { get; set; }
 		/// <summary>
 		/// Gets or sets Specifies whether evaluation should stop on exceptions and mute console. Overrides setPauseOnException state.
 		/// </summary>
-		public bool DoNotPauseOnExceptionsAndMuteConsole { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? DoNotPauseOnExceptionsAndMuteConsole { get; set; }
 		/// <summary>
 		/// Gets or sets Whether the result is expected to be a JSON object that should be sent by value.
 		/// </summary>
-		public bool ReturnByValue { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? ReturnByValue { get; set; }
 		/// <summary>
 		/// Gets or sets Whether preview should be generated for the result.
 		/// </summary>
-		public bool GeneratePreview { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? GeneratePreview { get; set; }
 		/// <summary>
 		/// Gets or sets Whether the resulting value should be considered for saving in the $n history.
 		/// </summary>
-		public bool SaveResult { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? SaveResult { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Debugger/EvaluateOnCallFrameCommandResponse.cs b/source/ChromeDevTools/Protocol/iOS/Debugger/EvaluateOnCallFrameCommandResponse.cs
index 4e212d8..3c2cfb3 100644
--- a/source/ChromeDevTools/Protocol/iOS/Debugger/EvaluateOnCallFrameCommandResponse.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Debugger/EvaluateOnCallFrameCommandResponse.cs
@@ -18,10 +18,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Debugger
 		/// <summary>
 		/// Gets or sets True if the result was thrown during the evaluation.
 		/// </summary>
-		public bool WasThrown { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? WasThrown { get; set; }
 		/// <summary>
 		/// Gets or sets If the result was saved, this is the $n index that can be used to access the value.
 		/// </summary>
-		public long SavedResultIndex { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? SavedResultIndex { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Debugger/FunctionDetails.cs b/source/ChromeDevTools/Protocol/iOS/Debugger/FunctionDetails.cs
index ad8a3ec..82b2de3 100644
--- a/source/ChromeDevTools/Protocol/iOS/Debugger/FunctionDetails.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Debugger/FunctionDetails.cs
@@ -17,18 +17,22 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Debugger
 		/// <summary>
 		/// Gets or sets Name of the function. Not present for anonymous functions.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Name { get; set; }
 		/// <summary>
 		/// Gets or sets Display name of the function(specified in 'displayName' property on the function object).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string DisplayName { get; set; }
 		/// <summary>
 		/// Gets or sets Name of the function inferred from its initial assignment.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string InferredName { get; set; }
 		/// <summary>
 		/// Gets or sets Scope chain for this closure.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Scope[] ScopeChain { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Debugger/GlobalObjectClearedEvent.cs b/source/ChromeDevTools/Protocol/iOS/Debugger/GlobalObjectClearedEvent.cs
index be1388c..e91acf4 100644
--- a/source/ChromeDevTools/Protocol/iOS/Debugger/GlobalObjectClearedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Debugger/GlobalObjectClearedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Debugger
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Debugger/Location.cs b/source/ChromeDevTools/Protocol/iOS/Debugger/Location.cs
index 8399266..e882f37 100644
--- a/source/ChromeDevTools/Protocol/iOS/Debugger/Location.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Debugger/Location.cs
@@ -21,6 +21,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Debugger
 		/// <summary>
 		/// Gets or sets Column number in the script.
 		/// </summary>
-		public long ColumnNumber { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? ColumnNumber { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Debugger/PausedEvent.cs b/source/ChromeDevTools/Protocol/iOS/Debugger/PausedEvent.cs
index 0b9b9e0..544b4fd 100644
--- a/source/ChromeDevTools/Protocol/iOS/Debugger/PausedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Debugger/PausedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Debugger
 {
@@ -20,6 +20,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Debugger
 		/// <summary>
 		/// Gets or sets Object containing break-specific auxiliary properties.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public object Data { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Debugger/PlayBreakpointActionSoundEvent.cs b/source/ChromeDevTools/Protocol/iOS/Debugger/PlayBreakpointActionSoundEvent.cs
index e7824b7..f6931a7 100644
--- a/source/ChromeDevTools/Protocol/iOS/Debugger/PlayBreakpointActionSoundEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Debugger/PlayBreakpointActionSoundEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Debugger
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Debugger/ResumedEvent.cs b/source/ChromeDevTools/Protocol/iOS/Debugger/ResumedEvent.cs
index daad919..b91fa4a 100644
--- a/source/ChromeDevTools/Protocol/iOS/Debugger/ResumedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Debugger/ResumedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Debugger
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Debugger/ScriptFailedToParseEvent.cs b/source/ChromeDevTools/Protocol/iOS/Debugger/ScriptFailedToParseEvent.cs
index a1eaa9e..90e2d72 100644
--- a/source/ChromeDevTools/Protocol/iOS/Debugger/ScriptFailedToParseEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Debugger/ScriptFailedToParseEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Debugger
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Debugger/ScriptParsedEvent.cs b/source/ChromeDevTools/Protocol/iOS/Debugger/ScriptParsedEvent.cs
index 8bedd5e..3c02cea 100644
--- a/source/ChromeDevTools/Protocol/iOS/Debugger/ScriptParsedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Debugger/ScriptParsedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Debugger
 {
@@ -36,14 +36,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Debugger
 		/// <summary>
 		/// Gets or sets Determines whether this script is a user extension script.
 		/// </summary>
-		public bool IsContentScript { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IsContentScript { get; set; }
 		/// <summary>
 		/// Gets or sets URL of source map associated with script (if any).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string SourceMapURL { get; set; }
 		/// <summary>
 		/// Gets or sets True, if this script has sourceURL.
 		/// </summary>
-		public bool HasSourceURL { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? HasSourceURL { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Debugger/SearchInContentCommand.cs b/source/ChromeDevTools/Protocol/iOS/Debugger/SearchInContentCommand.cs
index 68a5b62..e0d1593 100644
--- a/source/ChromeDevTools/Protocol/iOS/Debugger/SearchInContentCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Debugger/SearchInContentCommand.cs
@@ -22,10 +22,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Debugger
 		/// <summary>
 		/// Gets or sets If true, search is case sensitive.
 		/// </summary>
-		public bool CaseSensitive { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? CaseSensitive { get; set; }
 		/// <summary>
 		/// Gets or sets If true, treats string parameter as regex.
 		/// </summary>
-		public bool IsRegex { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IsRegex { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Debugger/SetBreakpointByUrlCommand.cs b/source/ChromeDevTools/Protocol/iOS/Debugger/SetBreakpointByUrlCommand.cs
index 1d52ebd..b4fb7cb 100644
--- a/source/ChromeDevTools/Protocol/iOS/Debugger/SetBreakpointByUrlCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Debugger/SetBreakpointByUrlCommand.cs
@@ -18,18 +18,22 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Debugger
 		/// <summary>
 		/// Gets or sets URL of the resources to set breakpoint on.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Url { get; set; }
 		/// <summary>
 		/// Gets or sets Regex pattern for the URLs of the resources to set breakpoints on. Either <code>url</code> or <code>urlRegex</code> must be specified.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string UrlRegex { get; set; }
 		/// <summary>
 		/// Gets or sets Offset in the line to set breakpoint at.
 		/// </summary>
-		public long ColumnNumber { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? ColumnNumber { get; set; }
 		/// <summary>
 		/// Gets or sets Options to apply to this breakpoint to modify its behavior.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public BreakpointOptions Options { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Debugger/SetBreakpointCommand.cs b/source/ChromeDevTools/Protocol/iOS/Debugger/SetBreakpointCommand.cs
index 9f86b65..d3a5f28 100644
--- a/source/ChromeDevTools/Protocol/iOS/Debugger/SetBreakpointCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Debugger/SetBreakpointCommand.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Debugger
 		/// <summary>
 		/// Gets or sets Options to apply to this breakpoint to modify its behavior.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public BreakpointOptions Options { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Debugger/SetOverlayMessageCommand.cs b/source/ChromeDevTools/Protocol/iOS/Debugger/SetOverlayMessageCommand.cs
index 1af8f0c..267f485 100644
--- a/source/ChromeDevTools/Protocol/iOS/Debugger/SetOverlayMessageCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Debugger/SetOverlayMessageCommand.cs
@@ -14,6 +14,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Debugger
 		/// <summary>
 		/// Gets or sets Overlay message to display when paused in debugger.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Message { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/IndexedDB/Key.cs b/source/ChromeDevTools/Protocol/iOS/IndexedDB/Key.cs
index 0e2a7db..ebee29d 100644
--- a/source/ChromeDevTools/Protocol/iOS/IndexedDB/Key.cs
+++ b/source/ChromeDevTools/Protocol/iOS/IndexedDB/Key.cs
@@ -17,18 +17,22 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.IndexedDB
 		/// <summary>
 		/// Gets or sets Number value.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double Number { get; set; }
 		/// <summary>
 		/// Gets or sets String value.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string String { get; set; }
 		/// <summary>
 		/// Gets or sets Date value.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double Date { get; set; }
 		/// <summary>
 		/// Gets or sets Array value.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Key[] Array { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/IndexedDB/KeyPath.cs b/source/ChromeDevTools/Protocol/iOS/IndexedDB/KeyPath.cs
index 900c9eb..00894a8 100644
--- a/source/ChromeDevTools/Protocol/iOS/IndexedDB/KeyPath.cs
+++ b/source/ChromeDevTools/Protocol/iOS/IndexedDB/KeyPath.cs
@@ -17,10 +17,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.IndexedDB
 		/// <summary>
 		/// Gets or sets String value.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string String { get; set; }
 		/// <summary>
 		/// Gets or sets Array value.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string[] Array { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/IndexedDB/KeyRange.cs b/source/ChromeDevTools/Protocol/iOS/IndexedDB/KeyRange.cs
index 4b435a8..2244d19 100644
--- a/source/ChromeDevTools/Protocol/iOS/IndexedDB/KeyRange.cs
+++ b/source/ChromeDevTools/Protocol/iOS/IndexedDB/KeyRange.cs
@@ -13,10 +13,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.IndexedDB
 		/// <summary>
 		/// Gets or sets Lower bound.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Key Lower { get; set; }
 		/// <summary>
 		/// Gets or sets Upper bound.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Key Upper { get; set; }
 		/// <summary>
 		/// Gets or sets If true lower bound is open.
diff --git a/source/ChromeDevTools/Protocol/iOS/IndexedDB/RequestDataCommand.cs b/source/ChromeDevTools/Protocol/iOS/IndexedDB/RequestDataCommand.cs
index d4cf41c..5c06c65 100644
--- a/source/ChromeDevTools/Protocol/iOS/IndexedDB/RequestDataCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/IndexedDB/RequestDataCommand.cs
@@ -38,6 +38,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.IndexedDB
 		/// <summary>
 		/// Gets or sets Key range.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public KeyRange KeyRange { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Inspector/ActivateExtraDomainsEvent.cs b/source/ChromeDevTools/Protocol/iOS/Inspector/ActivateExtraDomainsEvent.cs
index 8a02327..94adcec 100644
--- a/source/ChromeDevTools/Protocol/iOS/Inspector/ActivateExtraDomainsEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Inspector/ActivateExtraDomainsEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Inspector
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Inspector/DetachedEvent.cs b/source/ChromeDevTools/Protocol/iOS/Inspector/DetachedEvent.cs
index bf39fa8..dec75d5 100644
--- a/source/ChromeDevTools/Protocol/iOS/Inspector/DetachedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Inspector/DetachedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Inspector
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Inspector/EvaluateForTestInFrontendEvent.cs b/source/ChromeDevTools/Protocol/iOS/Inspector/EvaluateForTestInFrontendEvent.cs
index efd65d5..e23932a 100644
--- a/source/ChromeDevTools/Protocol/iOS/Inspector/EvaluateForTestInFrontendEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Inspector/EvaluateForTestInFrontendEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Inspector
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Inspector/InspectEvent.cs b/source/ChromeDevTools/Protocol/iOS/Inspector/InspectEvent.cs
index d31bf66..518829a 100644
--- a/source/ChromeDevTools/Protocol/iOS/Inspector/InspectEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Inspector/InspectEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Inspector
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Inspector/TargetCrashedEvent.cs b/source/ChromeDevTools/Protocol/iOS/Inspector/TargetCrashedEvent.cs
index 614a54a..cebe54a 100644
--- a/source/ChromeDevTools/Protocol/iOS/Inspector/TargetCrashedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Inspector/TargetCrashedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Inspector
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/LayerTree/CompositingReasons.cs b/source/ChromeDevTools/Protocol/iOS/LayerTree/CompositingReasons.cs
index 69b08eb..592eb4b 100644
--- a/source/ChromeDevTools/Protocol/iOS/LayerTree/CompositingReasons.cs
+++ b/source/ChromeDevTools/Protocol/iOS/LayerTree/CompositingReasons.cs
@@ -13,110 +13,137 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.LayerTree
 		/// <summary>
 		/// Gets or sets Composition due to association with an element with a CSS 3D transform.
 		/// </summary>
-		public bool Transform3D { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Transform3D { get; set; }
 		/// <summary>
 		/// Gets or sets Composition due to association with a <video> element.
 		/// </summary>
-		public bool Video { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Video { get; set; }
 		/// <summary>
 		/// Gets or sets Composition due to the element being a <canvas> element.
 		/// </summary>
-		public bool Canvas { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Canvas { get; set; }
 		/// <summary>
 		/// Gets or sets Composition due to association with a plugin.
 		/// </summary>
-		public bool Plugin { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Plugin { get; set; }
 		/// <summary>
 		/// Gets or sets Composition due to association with an <iframe> element.
 		/// </summary>
-		public bool IFrame { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IFrame { get; set; }
 		/// <summary>
 		/// Gets or sets Composition due to association with an element with a "backface-visibility: hidden" style.
 		/// </summary>
-		public bool BackfaceVisibilityHidden { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? BackfaceVisibilityHidden { get; set; }
 		/// <summary>
 		/// Gets or sets Composition due to association with an element clipping compositing descendants.
 		/// </summary>
-		public bool ClipsCompositingDescendants { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? ClipsCompositingDescendants { get; set; }
 		/// <summary>
 		/// Gets or sets Composition due to association with an animated element.
 		/// </summary>
-		public bool Animation { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Animation { get; set; }
 		/// <summary>
 		/// Gets or sets Composition due to association with an element with CSS filters applied.
 		/// </summary>
-		public bool Filters { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Filters { get; set; }
 		/// <summary>
 		/// Gets or sets Composition due to association with an element with a "position: fixed" style.
 		/// </summary>
-		public bool PositionFixed { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? PositionFixed { get; set; }
 		/// <summary>
 		/// Gets or sets Composition due to association with an element with a "position: sticky" style.
 		/// </summary>
-		public bool PositionSticky { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? PositionSticky { get; set; }
 		/// <summary>
 		/// Gets or sets Composition due to association with an element with a "overflow-scrolling: touch" style.
 		/// </summary>
-		public bool OverflowScrollingTouch { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? OverflowScrollingTouch { get; set; }
 		/// <summary>
 		/// Gets or sets Composition due to association with an element establishing a stacking context.
 		/// </summary>
-		public bool Stacking { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Stacking { get; set; }
 		/// <summary>
 		/// Gets or sets Composition due to association with an element overlapping other composited elements.
 		/// </summary>
-		public bool Overlap { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Overlap { get; set; }
 		/// <summary>
 		/// Gets or sets Composition due to association with an element with descendants that have a negative z-index.
 		/// </summary>
-		public bool NegativeZIndexChildren { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? NegativeZIndexChildren { get; set; }
 		/// <summary>
 		/// Gets or sets Composition due to association with an element with composited descendants.
 		/// </summary>
-		public bool TransformWithCompositedDescendants { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? TransformWithCompositedDescendants { get; set; }
 		/// <summary>
 		/// Gets or sets Composition due to association with an element with opacity applied and composited descendants.
 		/// </summary>
-		public bool OpacityWithCompositedDescendants { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? OpacityWithCompositedDescendants { get; set; }
 		/// <summary>
 		/// Gets or sets Composition due to association with a masked element and composited descendants.
 		/// </summary>
-		public bool MaskWithCompositedDescendants { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? MaskWithCompositedDescendants { get; set; }
 		/// <summary>
 		/// Gets or sets Composition due to association with an element with a reflection and composited descendants.
 		/// </summary>
-		public bool ReflectionWithCompositedDescendants { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? ReflectionWithCompositedDescendants { get; set; }
 		/// <summary>
 		/// Gets or sets Composition due to association with an element with CSS filters applied and composited descendants.
 		/// </summary>
-		public bool FilterWithCompositedDescendants { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? FilterWithCompositedDescendants { get; set; }
 		/// <summary>
 		/// Gets or sets Composition due to association with an element with CSS blending applied and composited descendants.
 		/// </summary>
-		public bool BlendingWithCompositedDescendants { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? BlendingWithCompositedDescendants { get; set; }
 		/// <summary>
 		/// Gets or sets Composition due to association with an element isolating compositing descendants having CSS blending applied.
 		/// </summary>
-		public bool IsolatesCompositedBlendingDescendants { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IsolatesCompositedBlendingDescendants { get; set; }
 		/// <summary>
 		/// Gets or sets Composition due to association with an element with perspective applied.
 		/// </summary>
-		public bool Perspective { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Perspective { get; set; }
 		/// <summary>
 		/// Gets or sets Composition due to association with an element with a "transform-style: preserve-3d" style.
 		/// </summary>
-		public bool Preserve3D { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Preserve3D { get; set; }
 		/// <summary>
 		/// Gets or sets Composition due to association with an element with a "will-change" style.
 		/// </summary>
-		public bool WillChange { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? WillChange { get; set; }
 		/// <summary>
 		/// Gets or sets Composition due to association with the root element.
 		/// </summary>
-		public bool Root { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Root { get; set; }
 		/// <summary>
 		/// Gets or sets Composition due to association with an element with a "blend-mode" style.
 		/// </summary>
-		public bool Blending { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Blending { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/LayerTree/Layer.cs b/source/ChromeDevTools/Protocol/iOS/LayerTree/Layer.cs
index 757f961..6bad917 100644
--- a/source/ChromeDevTools/Protocol/iOS/LayerTree/Layer.cs
+++ b/source/ChromeDevTools/Protocol/iOS/LayerTree/Layer.cs
@@ -37,26 +37,32 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.LayerTree
 		/// <summary>
 		/// Gets or sets Indicates whether this layer is associated with an element hosted in a shadow tree.
 		/// </summary>
-		public bool IsInShadowTree { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IsInShadowTree { get; set; }
 		/// <summary>
 		/// Gets or sets Indicates whether this layer was used to provide a reflection for the element.
 		/// </summary>
-		public bool IsReflection { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IsReflection { get; set; }
 		/// <summary>
 		/// Gets or sets Indicates whether the layer is attached to a pseudo element that is CSS generated content.
 		/// </summary>
-		public bool IsGeneratedContent { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IsGeneratedContent { get; set; }
 		/// <summary>
 		/// Gets or sets Indicates whether the layer was created for a CSS anonymous block or box.
 		/// </summary>
-		public bool IsAnonymous { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IsAnonymous { get; set; }
 		/// <summary>
 		/// Gets or sets The id for the pseudo element associated with this layer.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string PseudoElementId { get; set; }
 		/// <summary>
 		/// Gets or sets The name of the CSS pseudo-element that prompted the layer to be generated.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string PseudoElement { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/LayerTree/LayerTreeDidChangeEvent.cs b/source/ChromeDevTools/Protocol/iOS/LayerTree/LayerTreeDidChangeEvent.cs
index 5619557..3d6ec16 100644
--- a/source/ChromeDevTools/Protocol/iOS/LayerTree/LayerTreeDidChangeEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/LayerTree/LayerTreeDidChangeEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.LayerTree
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Network/CachedResource.cs b/source/ChromeDevTools/Protocol/iOS/Network/CachedResource.cs
index afb10c8..afa8ea1 100644
--- a/source/ChromeDevTools/Protocol/iOS/Network/CachedResource.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Network/CachedResource.cs
@@ -21,6 +21,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Network
 		/// <summary>
 		/// Gets or sets Cached response data.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Response Response { get; set; }
 		/// <summary>
 		/// Gets or sets Cached response body size.
@@ -29,6 +30,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Network
 		/// <summary>
 		/// Gets or sets URL of source map associated with this resource (if any).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string SourceMapURL { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Network/DataReceivedEvent.cs b/source/ChromeDevTools/Protocol/iOS/Network/DataReceivedEvent.cs
index 12e79e1..5bd8105 100644
--- a/source/ChromeDevTools/Protocol/iOS/Network/DataReceivedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Network/DataReceivedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Network
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Network/Initiator.cs b/source/ChromeDevTools/Protocol/iOS/Network/Initiator.cs
index 07df38d..9142e8c 100644
--- a/source/ChromeDevTools/Protocol/iOS/Network/Initiator.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Network/Initiator.cs
@@ -17,14 +17,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Network
 		/// <summary>
 		/// Gets or sets Initiator JavaScript stack trace, set for Script only.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Console.CallFrame[] StackTrace { get; set; }
 		/// <summary>
 		/// Gets or sets Initiator URL, set for Parser type only.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Url { get; set; }
 		/// <summary>
 		/// Gets or sets Initiator line number, set for Parser type only.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double LineNumber { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Network/LoadingFailedEvent.cs b/source/ChromeDevTools/Protocol/iOS/Network/LoadingFailedEvent.cs
index 24d3522..2a575b5 100644
--- a/source/ChromeDevTools/Protocol/iOS/Network/LoadingFailedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Network/LoadingFailedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Network
 {
@@ -24,6 +24,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Network
 		/// <summary>
 		/// Gets or sets True if loading was canceled.
 		/// </summary>
-		public bool Canceled { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Canceled { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Network/LoadingFinishedEvent.cs b/source/ChromeDevTools/Protocol/iOS/Network/LoadingFinishedEvent.cs
index dde21af..5af9f44 100644
--- a/source/ChromeDevTools/Protocol/iOS/Network/LoadingFinishedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Network/LoadingFinishedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Network
 {
@@ -20,6 +20,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Network
 		/// <summary>
 		/// Gets or sets URL of source map associated with this resource (if any).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string SourceMapURL { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Network/Request.cs b/source/ChromeDevTools/Protocol/iOS/Network/Request.cs
index 32ccae0..b5126cb 100644
--- a/source/ChromeDevTools/Protocol/iOS/Network/Request.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Network/Request.cs
@@ -25,6 +25,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Network
 		/// <summary>
 		/// Gets or sets HTTP POST request data.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string PostData { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Network/RequestServedFromCacheEvent.cs b/source/ChromeDevTools/Protocol/iOS/Network/RequestServedFromCacheEvent.cs
index 29a6652..6bfccf3 100644
--- a/source/ChromeDevTools/Protocol/iOS/Network/RequestServedFromCacheEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Network/RequestServedFromCacheEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Network
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Network/RequestServedFromMemoryCacheEvent.cs b/source/ChromeDevTools/Protocol/iOS/Network/RequestServedFromMemoryCacheEvent.cs
index c7c395b..00f8c0e 100644
--- a/source/ChromeDevTools/Protocol/iOS/Network/RequestServedFromMemoryCacheEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Network/RequestServedFromMemoryCacheEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Network
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Network/RequestWillBeSentEvent.cs b/source/ChromeDevTools/Protocol/iOS/Network/RequestWillBeSentEvent.cs
index 92db765..fea37cd 100644
--- a/source/ChromeDevTools/Protocol/iOS/Network/RequestWillBeSentEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Network/RequestWillBeSentEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Network
 {
@@ -40,10 +40,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Network
 		/// <summary>
 		/// Gets or sets Redirect response data.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Response RedirectResponse { get; set; }
 		/// <summary>
 		/// Gets or sets Resource type.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Page.ResourceType Type { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Network/Response.cs b/source/ChromeDevTools/Protocol/iOS/Network/Response.cs
index 6396862..3bd178f 100644
--- a/source/ChromeDevTools/Protocol/iOS/Network/Response.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Network/Response.cs
@@ -29,6 +29,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Network
 		/// <summary>
 		/// Gets or sets HTTP response headers text.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string HeadersText { get; set; }
 		/// <summary>
 		/// Gets or sets Resource mimeType as determined by the browser.
@@ -37,18 +38,22 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Network
 		/// <summary>
 		/// Gets or sets Refined HTTP request headers that were actually transmitted over the network.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Dictionary<string, string> RequestHeaders { get; set; }
 		/// <summary>
 		/// Gets or sets HTTP request headers text.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string RequestHeadersText { get; set; }
 		/// <summary>
 		/// Gets or sets Specifies that the request was served from the disk cache.
 		/// </summary>
-		public bool FromDiskCache { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? FromDiskCache { get; set; }
 		/// <summary>
 		/// Gets or sets Timing information for the given request.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public ResourceTiming Timing { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Network/ResponseReceivedEvent.cs b/source/ChromeDevTools/Protocol/iOS/Network/ResponseReceivedEvent.cs
index 941df6b..99ce230 100644
--- a/source/ChromeDevTools/Protocol/iOS/Network/ResponseReceivedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Network/ResponseReceivedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Network
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Network/WebSocketClosedEvent.cs b/source/ChromeDevTools/Protocol/iOS/Network/WebSocketClosedEvent.cs
index 43bab21..0123942 100644
--- a/source/ChromeDevTools/Protocol/iOS/Network/WebSocketClosedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Network/WebSocketClosedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Network
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Network/WebSocketCreatedEvent.cs b/source/ChromeDevTools/Protocol/iOS/Network/WebSocketCreatedEvent.cs
index 9198f15..ec9e054 100644
--- a/source/ChromeDevTools/Protocol/iOS/Network/WebSocketCreatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Network/WebSocketCreatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Network
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Network/WebSocketFrameErrorEvent.cs b/source/ChromeDevTools/Protocol/iOS/Network/WebSocketFrameErrorEvent.cs
index 7579dcb..df7135c 100644
--- a/source/ChromeDevTools/Protocol/iOS/Network/WebSocketFrameErrorEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Network/WebSocketFrameErrorEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Network
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Network/WebSocketFrameReceivedEvent.cs b/source/ChromeDevTools/Protocol/iOS/Network/WebSocketFrameReceivedEvent.cs
index e94fb94..ec65ec2 100644
--- a/source/ChromeDevTools/Protocol/iOS/Network/WebSocketFrameReceivedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Network/WebSocketFrameReceivedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Network
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Network/WebSocketFrameSentEvent.cs b/source/ChromeDevTools/Protocol/iOS/Network/WebSocketFrameSentEvent.cs
index f0a45dd..abd67f4 100644
--- a/source/ChromeDevTools/Protocol/iOS/Network/WebSocketFrameSentEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Network/WebSocketFrameSentEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Network
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Network/WebSocketHandshakeResponseReceivedEvent.cs b/source/ChromeDevTools/Protocol/iOS/Network/WebSocketHandshakeResponseReceivedEvent.cs
index a618dbb..0ca4924 100644
--- a/source/ChromeDevTools/Protocol/iOS/Network/WebSocketHandshakeResponseReceivedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Network/WebSocketHandshakeResponseReceivedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Network
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Network/WebSocketWillSendHandshakeRequestEvent.cs b/source/ChromeDevTools/Protocol/iOS/Network/WebSocketWillSendHandshakeRequestEvent.cs
index 34b1fba..a919624 100644
--- a/source/ChromeDevTools/Protocol/iOS/Network/WebSocketWillSendHandshakeRequestEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Network/WebSocketWillSendHandshakeRequestEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Network
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/OverlayTypes/ElementData.cs b/source/ChromeDevTools/Protocol/iOS/OverlayTypes/ElementData.cs
index 08e0016..4b06190 100644
--- a/source/ChromeDevTools/Protocol/iOS/OverlayTypes/ElementData.cs
+++ b/source/ChromeDevTools/Protocol/iOS/OverlayTypes/ElementData.cs
@@ -21,26 +21,32 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.OverlayTypes
 		/// <summary>
 		/// Gets or sets ClassName
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ClassName { get; set; }
 		/// <summary>
 		/// Gets or sets Size
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Size Size { get; set; }
 		/// <summary>
 		/// Gets or sets Computed accessibility role for the element.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Role { get; set; }
 		/// <summary>
 		/// Gets or sets RegionFlowData
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RegionFlowData RegionFlowData { get; set; }
 		/// <summary>
 		/// Gets or sets ContentFlowData
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public ContentFlowData ContentFlowData { get; set; }
 		/// <summary>
 		/// Gets or sets ShapeOutsideData
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public ShapeOutsideData ShapeOutsideData { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/OverlayTypes/FragmentHighlightData.cs b/source/ChromeDevTools/Protocol/iOS/OverlayTypes/FragmentHighlightData.cs
index ef16f8d..490bf6e 100644
--- a/source/ChromeDevTools/Protocol/iOS/OverlayTypes/FragmentHighlightData.cs
+++ b/source/ChromeDevTools/Protocol/iOS/OverlayTypes/FragmentHighlightData.cs
@@ -37,6 +37,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.OverlayTypes
 		/// <summary>
 		/// Gets or sets RegionClippingArea
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Point[] RegionClippingArea { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/OverlayTypes/NodeHighlightData.cs b/source/ChromeDevTools/Protocol/iOS/OverlayTypes/NodeHighlightData.cs
index b50e08f..e06e146 100644
--- a/source/ChromeDevTools/Protocol/iOS/OverlayTypes/NodeHighlightData.cs
+++ b/source/ChromeDevTools/Protocol/iOS/OverlayTypes/NodeHighlightData.cs
@@ -21,6 +21,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.OverlayTypes
 		/// <summary>
 		/// Gets or sets ElementData
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public ElementData ElementData { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/OverlayTypes/Region.cs b/source/ChromeDevTools/Protocol/iOS/OverlayTypes/Region.cs
index ff60089..df3d95b 100644
--- a/source/ChromeDevTools/Protocol/iOS/OverlayTypes/Region.cs
+++ b/source/ChromeDevTools/Protocol/iOS/OverlayTypes/Region.cs
@@ -25,6 +25,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.OverlayTypes
 		/// <summary>
 		/// Gets or sets IsHighlighted
 		/// </summary>
-		public bool IsHighlighted { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IsHighlighted { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/OverlayTypes/ShapeOutsideData.cs b/source/ChromeDevTools/Protocol/iOS/OverlayTypes/ShapeOutsideData.cs
index 85afb9e..7633477 100644
--- a/source/ChromeDevTools/Protocol/iOS/OverlayTypes/ShapeOutsideData.cs
+++ b/source/ChromeDevTools/Protocol/iOS/OverlayTypes/ShapeOutsideData.cs
@@ -17,10 +17,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.OverlayTypes
 		/// <summary>
 		/// Gets or sets Path for the element's shape.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public object[] Shape { get; set; }
 		/// <summary>
 		/// Gets or sets Path for the element's margin shape.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public object[] MarginShape { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Page/DomContentEventFiredEvent.cs b/source/ChromeDevTools/Protocol/iOS/Page/DomContentEventFiredEvent.cs
index 01a498e..36b86f8 100644
--- a/source/ChromeDevTools/Protocol/iOS/Page/DomContentEventFiredEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Page/DomContentEventFiredEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Page
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Page/Frame.cs b/source/ChromeDevTools/Protocol/iOS/Page/Frame.cs
index 1f0078a..cbf3d88 100644
--- a/source/ChromeDevTools/Protocol/iOS/Page/Frame.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Page/Frame.cs
@@ -17,6 +17,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Page
 		/// <summary>
 		/// Gets or sets Parent frame identifier.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ParentId { get; set; }
 		/// <summary>
 		/// Gets or sets Identifier of the loader associated with this frame.
@@ -25,6 +26,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Page
 		/// <summary>
 		/// Gets or sets Frame's name as specified in the tag.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Name { get; set; }
 		/// <summary>
 		/// Gets or sets Frame document's URL.
diff --git a/source/ChromeDevTools/Protocol/iOS/Page/FrameClearedScheduledNavigationEvent.cs b/source/ChromeDevTools/Protocol/iOS/Page/FrameClearedScheduledNavigationEvent.cs
index 8b492dd..edf340e 100644
--- a/source/ChromeDevTools/Protocol/iOS/Page/FrameClearedScheduledNavigationEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Page/FrameClearedScheduledNavigationEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Page
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Page/FrameDetachedEvent.cs b/source/ChromeDevTools/Protocol/iOS/Page/FrameDetachedEvent.cs
index 323c357..9a1feac 100644
--- a/source/ChromeDevTools/Protocol/iOS/Page/FrameDetachedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Page/FrameDetachedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Page
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Page/FrameNavigatedEvent.cs b/source/ChromeDevTools/Protocol/iOS/Page/FrameNavigatedEvent.cs
index e429637..eb04031 100644
--- a/source/ChromeDevTools/Protocol/iOS/Page/FrameNavigatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Page/FrameNavigatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Page
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Page/FrameResource.cs b/source/ChromeDevTools/Protocol/iOS/Page/FrameResource.cs
index fa26bfe..6e78d38 100644
--- a/source/ChromeDevTools/Protocol/iOS/Page/FrameResource.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Page/FrameResource.cs
@@ -25,14 +25,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Page
 		/// <summary>
 		/// Gets or sets True if the resource failed to load.
 		/// </summary>
-		public bool Failed { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Failed { get; set; }
 		/// <summary>
 		/// Gets or sets True if the resource was canceled during loading.
 		/// </summary>
-		public bool Canceled { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Canceled { get; set; }
 		/// <summary>
 		/// Gets or sets URL of source map associated with this resource (if any).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string SourceMapURL { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Page/FrameResourceTree.cs b/source/ChromeDevTools/Protocol/iOS/Page/FrameResourceTree.cs
index 58b125a..693f348 100644
--- a/source/ChromeDevTools/Protocol/iOS/Page/FrameResourceTree.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Page/FrameResourceTree.cs
@@ -17,6 +17,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Page
 		/// <summary>
 		/// Gets or sets Child frames.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public FrameResourceTree[] ChildFrames { get; set; }
 		/// <summary>
 		/// Gets or sets Information about frame resources.
diff --git a/source/ChromeDevTools/Protocol/iOS/Page/FrameScheduledNavigationEvent.cs b/source/ChromeDevTools/Protocol/iOS/Page/FrameScheduledNavigationEvent.cs
index db6afcd..6420fa2 100644
--- a/source/ChromeDevTools/Protocol/iOS/Page/FrameScheduledNavigationEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Page/FrameScheduledNavigationEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Page
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Page/FrameStartedLoadingEvent.cs b/source/ChromeDevTools/Protocol/iOS/Page/FrameStartedLoadingEvent.cs
index 9a2732c..7bb6075 100644
--- a/source/ChromeDevTools/Protocol/iOS/Page/FrameStartedLoadingEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Page/FrameStartedLoadingEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Page
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Page/FrameStoppedLoadingEvent.cs b/source/ChromeDevTools/Protocol/iOS/Page/FrameStoppedLoadingEvent.cs
index 20fae53..8ac36de 100644
--- a/source/ChromeDevTools/Protocol/iOS/Page/FrameStoppedLoadingEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Page/FrameStoppedLoadingEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Page
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Page/HandleJavaScriptDialogCommand.cs b/source/ChromeDevTools/Protocol/iOS/Page/HandleJavaScriptDialogCommand.cs
index 7123b0e..e5732bc 100644
--- a/source/ChromeDevTools/Protocol/iOS/Page/HandleJavaScriptDialogCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Page/HandleJavaScriptDialogCommand.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Page
 		/// <summary>
 		/// Gets or sets The text to enter into the dialog prompt before accepting. Used only if this is a prompt dialog.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string PromptText { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Page/JavascriptDialogClosedEvent.cs b/source/ChromeDevTools/Protocol/iOS/Page/JavascriptDialogClosedEvent.cs
index de637c0..38940dd 100644
--- a/source/ChromeDevTools/Protocol/iOS/Page/JavascriptDialogClosedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Page/JavascriptDialogClosedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Page
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Page/JavascriptDialogOpeningEvent.cs b/source/ChromeDevTools/Protocol/iOS/Page/JavascriptDialogOpeningEvent.cs
index 5359f2d..db46317 100644
--- a/source/ChromeDevTools/Protocol/iOS/Page/JavascriptDialogOpeningEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Page/JavascriptDialogOpeningEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Page
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Page/LoadEventFiredEvent.cs b/source/ChromeDevTools/Protocol/iOS/Page/LoadEventFiredEvent.cs
index 711d068..f65baea 100644
--- a/source/ChromeDevTools/Protocol/iOS/Page/LoadEventFiredEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Page/LoadEventFiredEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Page
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Page/ReloadCommand.cs b/source/ChromeDevTools/Protocol/iOS/Page/ReloadCommand.cs
index 314d3fa..ce965df 100644
--- a/source/ChromeDevTools/Protocol/iOS/Page/ReloadCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Page/ReloadCommand.cs
@@ -14,10 +14,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Page
 		/// <summary>
 		/// Gets or sets If true, browser cache is ignored (as if the user pressed Shift+refresh).
 		/// </summary>
-		public bool IgnoreCache { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IgnoreCache { get; set; }
 		/// <summary>
 		/// Gets or sets If set, the script will be injected into all frames of the inspected page after reload.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ScriptToEvaluateOnLoad { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Page/ScriptsEnabledEvent.cs b/source/ChromeDevTools/Protocol/iOS/Page/ScriptsEnabledEvent.cs
index eec6ba3..38cdbc9 100644
--- a/source/ChromeDevTools/Protocol/iOS/Page/ScriptsEnabledEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Page/ScriptsEnabledEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Page
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Page/SearchInResourceCommand.cs b/source/ChromeDevTools/Protocol/iOS/Page/SearchInResourceCommand.cs
index 1c9d48b..ee06d5d 100644
--- a/source/ChromeDevTools/Protocol/iOS/Page/SearchInResourceCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Page/SearchInResourceCommand.cs
@@ -26,10 +26,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Page
 		/// <summary>
 		/// Gets or sets If true, search is case sensitive.
 		/// </summary>
-		public bool CaseSensitive { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? CaseSensitive { get; set; }
 		/// <summary>
 		/// Gets or sets If true, treats string parameter as regex.
 		/// </summary>
-		public bool IsRegex { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IsRegex { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Page/SearchInResourcesCommand.cs b/source/ChromeDevTools/Protocol/iOS/Page/SearchInResourcesCommand.cs
index 1593e3c..aa537bb 100644
--- a/source/ChromeDevTools/Protocol/iOS/Page/SearchInResourcesCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Page/SearchInResourcesCommand.cs
@@ -18,10 +18,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Page
 		/// <summary>
 		/// Gets or sets If true, search is case sensitive.
 		/// </summary>
-		public bool CaseSensitive { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? CaseSensitive { get; set; }
 		/// <summary>
 		/// Gets or sets If true, treats string parameter as regex.
 		/// </summary>
-		public bool IsRegex { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IsRegex { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Runtime/CallArgument.cs b/source/ChromeDevTools/Protocol/iOS/Runtime/CallArgument.cs
index 83775ff..4bc7c84 100644
--- a/source/ChromeDevTools/Protocol/iOS/Runtime/CallArgument.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Runtime/CallArgument.cs
@@ -13,10 +13,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Runtime
 		/// <summary>
 		/// Gets or sets Primitive value.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public object Value { get; set; }
 		/// <summary>
 		/// Gets or sets Remote object handle.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ObjectId { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Runtime/CallFunctionOnCommand.cs b/source/ChromeDevTools/Protocol/iOS/Runtime/CallFunctionOnCommand.cs
index beb92fc..29b82c2 100644
--- a/source/ChromeDevTools/Protocol/iOS/Runtime/CallFunctionOnCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Runtime/CallFunctionOnCommand.cs
@@ -22,18 +22,22 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Runtime
 		/// <summary>
 		/// Gets or sets Call arguments. All call arguments must belong to the same JavaScript world as the target object.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public CallArgument[] Arguments { get; set; }
 		/// <summary>
 		/// Gets or sets Specifies whether function call should stop on exceptions and mute console. Overrides setPauseOnException state.
 		/// </summary>
-		public bool DoNotPauseOnExceptionsAndMuteConsole { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? DoNotPauseOnExceptionsAndMuteConsole { get; set; }
 		/// <summary>
 		/// Gets or sets Whether the result is expected to be a JSON object which should be sent by value.
 		/// </summary>
-		public bool ReturnByValue { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? ReturnByValue { get; set; }
 		/// <summary>
 		/// Gets or sets Whether preview should be generated for the result.
 		/// </summary>
-		public bool GeneratePreview { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? GeneratePreview { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Runtime/CallFunctionOnCommandResponse.cs b/source/ChromeDevTools/Protocol/iOS/Runtime/CallFunctionOnCommandResponse.cs
index 8dc7ed4..219e448 100644
--- a/source/ChromeDevTools/Protocol/iOS/Runtime/CallFunctionOnCommandResponse.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Runtime/CallFunctionOnCommandResponse.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Runtime
 		/// <summary>
 		/// Gets or sets True if the result was thrown during the evaluation.
 		/// </summary>
-		public bool WasThrown { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? WasThrown { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Runtime/CollectionEntry.cs b/source/ChromeDevTools/Protocol/iOS/Runtime/CollectionEntry.cs
index ade69c2..8f36977 100644
--- a/source/ChromeDevTools/Protocol/iOS/Runtime/CollectionEntry.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Runtime/CollectionEntry.cs
@@ -13,6 +13,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Runtime
 		/// <summary>
 		/// Gets or sets Entry key of a map-like collection, otherwise not provided.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Runtime.RemoteObject Key { get; set; }
 		/// <summary>
 		/// Gets or sets Entry value.
diff --git a/source/ChromeDevTools/Protocol/iOS/Runtime/EntryPreview.cs b/source/ChromeDevTools/Protocol/iOS/Runtime/EntryPreview.cs
index 4e9ae30..9c0017c 100644
--- a/source/ChromeDevTools/Protocol/iOS/Runtime/EntryPreview.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Runtime/EntryPreview.cs
@@ -13,6 +13,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Runtime
 		/// <summary>
 		/// Gets or sets Entry key. Specified for map-like collection entries.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public ObjectPreview Key { get; set; }
 		/// <summary>
 		/// Gets or sets Entry value.
diff --git a/source/ChromeDevTools/Protocol/iOS/Runtime/EvaluateCommand.cs b/source/ChromeDevTools/Protocol/iOS/Runtime/EvaluateCommand.cs
index 955ed08..a0ac366 100644
--- a/source/ChromeDevTools/Protocol/iOS/Runtime/EvaluateCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Runtime/EvaluateCommand.cs
@@ -18,30 +18,37 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Runtime
 		/// <summary>
 		/// Gets or sets Symbolic group name that can be used to release multiple objects.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ObjectGroup { get; set; }
 		/// <summary>
 		/// Gets or sets Determines whether Command Line API should be available during the evaluation.
 		/// </summary>
-		public bool IncludeCommandLineAPI { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IncludeCommandLineAPI { get; set; }
 		/// <summary>
 		/// Gets or sets Specifies whether evaluation should stop on exceptions and mute console. Overrides setPauseOnException state.
 		/// </summary>
-		public bool DoNotPauseOnExceptionsAndMuteConsole { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? DoNotPauseOnExceptionsAndMuteConsole { get; set; }
 		/// <summary>
 		/// Gets or sets Specifies in which isolated context to perform evaluation. Each content script lives in an isolated context and this parameter may be used to specify one of those contexts. If the parameter is omitted or 0 the evaluation will be performed in the context of the inspected page.
 		/// </summary>
-		public long ContextId { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? ContextId { get; set; }
 		/// <summary>
 		/// Gets or sets Whether the result is expected to be a JSON object that should be sent by value.
 		/// </summary>
-		public bool ReturnByValue { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? ReturnByValue { get; set; }
 		/// <summary>
 		/// Gets or sets Whether preview should be generated for the result.
 		/// </summary>
-		public bool GeneratePreview { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? GeneratePreview { get; set; }
 		/// <summary>
 		/// Gets or sets Whether the resulting value should be considered for saving in the $n history.
 		/// </summary>
-		public bool SaveResult { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? SaveResult { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Runtime/EvaluateCommandResponse.cs b/source/ChromeDevTools/Protocol/iOS/Runtime/EvaluateCommandResponse.cs
index 6828015..0fc9eb0 100644
--- a/source/ChromeDevTools/Protocol/iOS/Runtime/EvaluateCommandResponse.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Runtime/EvaluateCommandResponse.cs
@@ -18,10 +18,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Runtime
 		/// <summary>
 		/// Gets or sets True if the result was thrown during the evaluation.
 		/// </summary>
-		public bool WasThrown { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? WasThrown { get; set; }
 		/// <summary>
 		/// Gets or sets If the result was saved, this is the $n index that can be used to access the value.
 		/// </summary>
-		public long SavedResultIndex { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? SavedResultIndex { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Runtime/ExecutionContextCreatedEvent.cs b/source/ChromeDevTools/Protocol/iOS/Runtime/ExecutionContextCreatedEvent.cs
index 3b4e8c0..ec3fc32 100644
--- a/source/ChromeDevTools/Protocol/iOS/Runtime/ExecutionContextCreatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Runtime/ExecutionContextCreatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Runtime
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Runtime/GetCollectionEntriesCommand.cs b/source/ChromeDevTools/Protocol/iOS/Runtime/GetCollectionEntriesCommand.cs
index bc86625..c6f656a 100644
--- a/source/ChromeDevTools/Protocol/iOS/Runtime/GetCollectionEntriesCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Runtime/GetCollectionEntriesCommand.cs
@@ -18,14 +18,17 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Runtime
 		/// <summary>
 		/// Gets or sets Symbolic group name that can be used to release multiple. If not provided, it will be the same objectGroup as the RemoteObject determined from <code>objectId</code>. This is useful for WeakMap to release the collection entries.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ObjectGroup { get; set; }
 		/// <summary>
 		/// Gets or sets If provided skip to this index before collecting values. Otherwise, 0.
 		/// </summary>
-		public long StartIndex { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? StartIndex { get; set; }
 		/// <summary>
 		/// Gets or sets If provided only return <code>numberToFetch</code> values. Otherwise, return values all the way to the end.
 		/// </summary>
-		public long NumberToFetch { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? NumberToFetch { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Runtime/GetDisplayablePropertiesCommand.cs b/source/ChromeDevTools/Protocol/iOS/Runtime/GetDisplayablePropertiesCommand.cs
index a962ef8..0146853 100644
--- a/source/ChromeDevTools/Protocol/iOS/Runtime/GetDisplayablePropertiesCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Runtime/GetDisplayablePropertiesCommand.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Runtime
 		/// <summary>
 		/// Gets or sets Whether preview should be generated for property values.
 		/// </summary>
-		public bool GeneratePreview { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? GeneratePreview { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Runtime/GetDisplayablePropertiesCommandResponse.cs b/source/ChromeDevTools/Protocol/iOS/Runtime/GetDisplayablePropertiesCommandResponse.cs
index b3d3738..f99d65a 100644
--- a/source/ChromeDevTools/Protocol/iOS/Runtime/GetDisplayablePropertiesCommandResponse.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Runtime/GetDisplayablePropertiesCommandResponse.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Runtime
 		/// <summary>
 		/// Gets or sets Internal object properties.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public InternalPropertyDescriptor[] InternalProperties { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Runtime/GetPropertiesCommand.cs b/source/ChromeDevTools/Protocol/iOS/Runtime/GetPropertiesCommand.cs
index f1b54ce..14329f7 100644
--- a/source/ChromeDevTools/Protocol/iOS/Runtime/GetPropertiesCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Runtime/GetPropertiesCommand.cs
@@ -18,10 +18,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Runtime
 		/// <summary>
 		/// Gets or sets If true, returns properties belonging only to the object itself, not to its prototype chain.
 		/// </summary>
-		public bool OwnProperties { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? OwnProperties { get; set; }
 		/// <summary>
 		/// Gets or sets Whether preview should be generated for property values.
 		/// </summary>
-		public bool GeneratePreview { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? GeneratePreview { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Runtime/GetPropertiesCommandResponse.cs b/source/ChromeDevTools/Protocol/iOS/Runtime/GetPropertiesCommandResponse.cs
index 94c755a..2042ae9 100644
--- a/source/ChromeDevTools/Protocol/iOS/Runtime/GetPropertiesCommandResponse.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Runtime/GetPropertiesCommandResponse.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Runtime
 		/// <summary>
 		/// Gets or sets Internal object properties.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public InternalPropertyDescriptor[] InternalProperties { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Runtime/InternalPropertyDescriptor.cs b/source/ChromeDevTools/Protocol/iOS/Runtime/InternalPropertyDescriptor.cs
index a343a84..3b36b5a 100644
--- a/source/ChromeDevTools/Protocol/iOS/Runtime/InternalPropertyDescriptor.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Runtime/InternalPropertyDescriptor.cs
@@ -17,6 +17,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Runtime
 		/// <summary>
 		/// Gets or sets The value associated with the property.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RemoteObject Value { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Runtime/ObjectPreview.cs b/source/ChromeDevTools/Protocol/iOS/Runtime/ObjectPreview.cs
index d741e16..8f36d04 100644
--- a/source/ChromeDevTools/Protocol/iOS/Runtime/ObjectPreview.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Runtime/ObjectPreview.cs
@@ -17,10 +17,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Runtime
 		/// <summary>
 		/// Gets or sets Object subtype hint. Specified for <code>object</code> type values only.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Subtype { get; set; }
 		/// <summary>
 		/// Gets or sets String representation of the object.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Description { get; set; }
 		/// <summary>
 		/// Gets or sets Determines whether preview is lossless (contains all information of the original object).
@@ -29,18 +31,22 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Runtime
 		/// <summary>
 		/// Gets or sets True iff some of the properties of the original did not fit.
 		/// </summary>
-		public bool Overflow { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Overflow { get; set; }
 		/// <summary>
 		/// Gets or sets List of the properties.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public PropertyPreview[] Properties { get; set; }
 		/// <summary>
 		/// Gets or sets List of the entries. Specified for <code>map</code> and <code>set</code> subtype values only.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public EntryPreview[] Entries { get; set; }
 		/// <summary>
 		/// Gets or sets Size of the array/collection. Specified for array/map/set/weakmap/weakset object type values only.
 		/// </summary>
-		public long Size { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? Size { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Runtime/ParseCommandResponse.cs b/source/ChromeDevTools/Protocol/iOS/Runtime/ParseCommandResponse.cs
index 5eb8372..adfe7b4 100644
--- a/source/ChromeDevTools/Protocol/iOS/Runtime/ParseCommandResponse.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Runtime/ParseCommandResponse.cs
@@ -18,10 +18,12 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Runtime
 		/// <summary>
 		/// Gets or sets Parse error message.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Message { get; set; }
 		/// <summary>
 		/// Gets or sets Range in the source where the error occurred.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public ErrorRange Range { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Runtime/PropertyDescriptor.cs b/source/ChromeDevTools/Protocol/iOS/Runtime/PropertyDescriptor.cs
index 42e252a..70f7f91 100644
--- a/source/ChromeDevTools/Protocol/iOS/Runtime/PropertyDescriptor.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Runtime/PropertyDescriptor.cs
@@ -17,18 +17,22 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Runtime
 		/// <summary>
 		/// Gets or sets The value associated with the property.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RemoteObject Value { get; set; }
 		/// <summary>
 		/// Gets or sets True if the value associated with the property may be changed (data descriptors only).
 		/// </summary>
-		public bool Writable { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Writable { get; set; }
 		/// <summary>
 		/// Gets or sets A function which serves as a getter for the property, or <code>undefined</code> if there is no getter (accessor descriptors only).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RemoteObject Get { get; set; }
 		/// <summary>
 		/// Gets or sets A function which serves as a setter for the property, or <code>undefined</code> if there is no setter (accessor descriptors only).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RemoteObject Set { get; set; }
 		/// <summary>
 		/// Gets or sets True if the type of this property descriptor may be changed and if the property may be deleted from the corresponding object.
@@ -41,18 +45,22 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Runtime
 		/// <summary>
 		/// Gets or sets True if the result was thrown during the evaluation.
 		/// </summary>
-		public bool WasThrown { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? WasThrown { get; set; }
 		/// <summary>
 		/// Gets or sets True if the property is owned for the object.
 		/// </summary>
-		public bool IsOwn { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IsOwn { get; set; }
 		/// <summary>
 		/// Gets or sets Property symbol object, if the property is a symbol.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public Runtime.RemoteObject Symbol { get; set; }
 		/// <summary>
 		/// Gets or sets True if the property value came from a native getter.
 		/// </summary>
-		public bool NativeGetter { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? NativeGetter { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Runtime/PropertyPreview.cs b/source/ChromeDevTools/Protocol/iOS/Runtime/PropertyPreview.cs
index 2b71e03..64c86ce 100644
--- a/source/ChromeDevTools/Protocol/iOS/Runtime/PropertyPreview.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Runtime/PropertyPreview.cs
@@ -21,18 +21,22 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Runtime
 		/// <summary>
 		/// Gets or sets Object subtype hint. Specified for <code>object</code> type values only.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Subtype { get; set; }
 		/// <summary>
 		/// Gets or sets User-friendly property value string.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Value { get; set; }
 		/// <summary>
 		/// Gets or sets Nested value preview.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public ObjectPreview ValuePreview { get; set; }
 		/// <summary>
 		/// Gets or sets True if this is an internal property.
 		/// </summary>
-		public bool Internal { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? Internal { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Runtime/RemoteObject.cs b/source/ChromeDevTools/Protocol/iOS/Runtime/RemoteObject.cs
index 38654d2..157e9e4 100644
--- a/source/ChromeDevTools/Protocol/iOS/Runtime/RemoteObject.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Runtime/RemoteObject.cs
@@ -17,34 +17,42 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Runtime
 		/// <summary>
 		/// Gets or sets Object subtype hint. Specified for <code>object</code> <code>function</code> (for class) type values only.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Subtype { get; set; }
 		/// <summary>
 		/// Gets or sets Object class (constructor) name. Specified for <code>object</code> type values only.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ClassName { get; set; }
 		/// <summary>
 		/// Gets or sets Remote object value (in case of primitive values or JSON values if it was requested).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public object Value { get; set; }
 		/// <summary>
 		/// Gets or sets String representation of the object.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Description { get; set; }
 		/// <summary>
 		/// Gets or sets Unique object identifier (for non-primitive values).
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ObjectId { get; set; }
 		/// <summary>
 		/// Gets or sets Size of the array/collection. Specified for array/map/set/weakmap/weakset object type values only.
 		/// </summary>
-		public long Size { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? Size { get; set; }
 		/// <summary>
 		/// Gets or sets Remote object for the class prototype. Specified for class object type values only.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public RemoteObject ClassPrototype { get; set; }
 		/// <summary>
 		/// Gets or sets Preview containing abbreviated property values. Specified for <code>object</code> type values only.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public ObjectPreview Preview { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Runtime/SaveResultCommand.cs b/source/ChromeDevTools/Protocol/iOS/Runtime/SaveResultCommand.cs
index c39f947..ae58255 100644
--- a/source/ChromeDevTools/Protocol/iOS/Runtime/SaveResultCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Runtime/SaveResultCommand.cs
@@ -18,6 +18,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Runtime
 		/// <summary>
 		/// Gets or sets Unique id of the execution context. To specify in which execution context script evaluation should be performed. If not provided, determine from the CallArgument's objectId.
 		/// </summary>
-		public long ContextId { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? ContextId { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Runtime/SaveResultCommandResponse.cs b/source/ChromeDevTools/Protocol/iOS/Runtime/SaveResultCommandResponse.cs
index a161805..f50c49c 100644
--- a/source/ChromeDevTools/Protocol/iOS/Runtime/SaveResultCommandResponse.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Runtime/SaveResultCommandResponse.cs
@@ -14,6 +14,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Runtime
 		/// <summary>
 		/// Gets or sets If the value was saved, this is the $n index that can be used to access the value.
 		/// </summary>
-		public long SavedResultIndex { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? SavedResultIndex { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Runtime/StructureDescription.cs b/source/ChromeDevTools/Protocol/iOS/Runtime/StructureDescription.cs
index 781d490..97f45c1 100644
--- a/source/ChromeDevTools/Protocol/iOS/Runtime/StructureDescription.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Runtime/StructureDescription.cs
@@ -13,22 +13,27 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Runtime
 		/// <summary>
 		/// Gets or sets Array of strings, where the strings represent object properties.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string[] Fields { get; set; }
 		/// <summary>
 		/// Gets or sets Array of strings, where the strings represent optional object properties.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string[] OptionalFields { get; set; }
 		/// <summary>
 		/// Gets or sets Name of the constructor.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string ConstructorName { get; set; }
 		/// <summary>
 		/// Gets or sets Pointer to the StructureRepresentation of the protoype if one exists.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public StructureDescription PrototypeStructure { get; set; }
 		/// <summary>
 		/// Gets or sets If true, it indicates that the fields in this StructureDescription may be inaccurate. I.e, there might have been fields that have been deleted before it was profiled or it has fields we haven't profiled.
 		/// </summary>
-		public bool IsImprecise { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IsImprecise { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Runtime/TypeDescription.cs b/source/ChromeDevTools/Protocol/iOS/Runtime/TypeDescription.cs
index a07185e..a2d5ad7 100644
--- a/source/ChromeDevTools/Protocol/iOS/Runtime/TypeDescription.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Runtime/TypeDescription.cs
@@ -17,18 +17,22 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Runtime
 		/// <summary>
 		/// Gets or sets Least common ancestor of all Constructors if the TypeDescription has seen any structures. This string is the display name of the shared constructor function.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string LeastCommonAncestor { get; set; }
 		/// <summary>
 		/// Gets or sets Set of booleans for determining the aggregate type of this type description.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public TypeSet TypeSet { get; set; }
 		/// <summary>
 		/// Gets or sets Array of descriptions for all structures seen for this variable.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public StructureDescription[] Structures { get; set; }
 		/// <summary>
 		/// Gets or sets If true, this indicates that no more structures are being profiled because some maximum threshold has been reached and profiling has stopped because of memory pressure.
 		/// </summary>
-		public bool IsTruncated { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public bool? IsTruncated { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Timeline/CPUProfile.cs b/source/ChromeDevTools/Protocol/iOS/Timeline/CPUProfile.cs
index a86a506..2397c6b 100644
--- a/source/ChromeDevTools/Protocol/iOS/Timeline/CPUProfile.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Timeline/CPUProfile.cs
@@ -17,6 +17,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Timeline
 		/// <summary>
 		/// Gets or sets IdleTime
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public double IdleTime { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Timeline/CPUProfileNode.cs b/source/ChromeDevTools/Protocol/iOS/Timeline/CPUProfileNode.cs
index 9334bdb..6d31a2a 100644
--- a/source/ChromeDevTools/Protocol/iOS/Timeline/CPUProfileNode.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Timeline/CPUProfileNode.cs
@@ -21,22 +21,27 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Timeline
 		/// <summary>
 		/// Gets or sets Function name.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string FunctionName { get; set; }
 		/// <summary>
 		/// Gets or sets URL.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public string Url { get; set; }
 		/// <summary>
 		/// Gets or sets Line number.
 		/// </summary>
-		public long LineNumber { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? LineNumber { get; set; }
 		/// <summary>
 		/// Gets or sets Column number.
 		/// </summary>
-		public long ColumnNumber { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? ColumnNumber { get; set; }
 		/// <summary>
 		/// Gets or sets Child nodes.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public CPUProfileNode[] Children { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Timeline/EventRecordedEvent.cs b/source/ChromeDevTools/Protocol/iOS/Timeline/EventRecordedEvent.cs
index 786a776..9c1e339 100644
--- a/source/ChromeDevTools/Protocol/iOS/Timeline/EventRecordedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Timeline/EventRecordedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Timeline
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Timeline/RecordingStartedEvent.cs b/source/ChromeDevTools/Protocol/iOS/Timeline/RecordingStartedEvent.cs
index 9508ed4..c78dfaf 100644
--- a/source/ChromeDevTools/Protocol/iOS/Timeline/RecordingStartedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Timeline/RecordingStartedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Timeline
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Timeline/RecordingStoppedEvent.cs b/source/ChromeDevTools/Protocol/iOS/Timeline/RecordingStoppedEvent.cs
index 0187691..055f412 100644
--- a/source/ChromeDevTools/Protocol/iOS/Timeline/RecordingStoppedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Timeline/RecordingStoppedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Timeline
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Timeline/StartCommand.cs b/source/ChromeDevTools/Protocol/iOS/Timeline/StartCommand.cs
index 427fbc9..bbb735f 100644
--- a/source/ChromeDevTools/Protocol/iOS/Timeline/StartCommand.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Timeline/StartCommand.cs
@@ -14,6 +14,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Timeline
 		/// <summary>
 		/// Gets or sets Samples JavaScript stack traces up to <code>maxCallStackDepth</code>, defaults to 5.
 		/// </summary>
-		public long MaxCallStackDepth { get; set; }
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
+		public long? MaxCallStackDepth { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Timeline/TimelineEvent.cs b/source/ChromeDevTools/Protocol/iOS/Timeline/TimelineEvent.cs
index 29b880f..2beca02 100644
--- a/source/ChromeDevTools/Protocol/iOS/Timeline/TimelineEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Timeline/TimelineEvent.cs
@@ -21,6 +21,7 @@ namespace MasterDevs.ChromeDevTools.Protocol.iOS.Timeline
 		/// <summary>
 		/// Gets or sets Nested records.
 		/// </summary>
+		[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
 		public TimelineEvent[] Children { get; set; }
 	}
 }
diff --git a/source/ChromeDevTools/Protocol/iOS/Worker/DisconnectedFromWorkerEvent.cs b/source/ChromeDevTools/Protocol/iOS/Worker/DisconnectedFromWorkerEvent.cs
index 5de834a..6216036 100644
--- a/source/ChromeDevTools/Protocol/iOS/Worker/DisconnectedFromWorkerEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Worker/DisconnectedFromWorkerEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Worker
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Worker/DispatchMessageFromWorkerEvent.cs b/source/ChromeDevTools/Protocol/iOS/Worker/DispatchMessageFromWorkerEvent.cs
index 76a2315..91e96bb 100644
--- a/source/ChromeDevTools/Protocol/iOS/Worker/DispatchMessageFromWorkerEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Worker/DispatchMessageFromWorkerEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Worker
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Worker/WorkerCreatedEvent.cs b/source/ChromeDevTools/Protocol/iOS/Worker/WorkerCreatedEvent.cs
index 5f07816..77bc969 100644
--- a/source/ChromeDevTools/Protocol/iOS/Worker/WorkerCreatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Worker/WorkerCreatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Worker
 {
diff --git a/source/ChromeDevTools/Protocol/iOS/Worker/WorkerTerminatedEvent.cs b/source/ChromeDevTools/Protocol/iOS/Worker/WorkerTerminatedEvent.cs
index 6725424..46e7c74 100644
--- a/source/ChromeDevTools/Protocol/iOS/Worker/WorkerTerminatedEvent.cs
+++ b/source/ChromeDevTools/Protocol/iOS/Worker/WorkerTerminatedEvent.cs
@@ -1,4 +1,4 @@
-using MasterDevs.ChromeDevTools;
+using MasterDevs.ChromeDevTools;using Newtonsoft.Json;
 
 namespace MasterDevs.ChromeDevTools.Protocol.iOS.Worker
 {
diff --git a/source/MasterDevs.ChromeDevTools.Tests/SerializationTests.cs b/source/MasterDevs.ChromeDevTools.Tests/SerializationTests.cs
index f0bb3f4..400ca82 100644
--- a/source/MasterDevs.ChromeDevTools.Tests/SerializationTests.cs
+++ b/source/MasterDevs.ChromeDevTools.Tests/SerializationTests.cs
@@ -1,4 +1,5 @@
-using MasterDevs.ChromeDevTools.Protocol.Chrome.DOM;
+using MasterDevs.ChromeDevTools.Protocol.Chrome.Debugger;
+using MasterDevs.ChromeDevTools.Protocol.Chrome.DOM;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
 using Newtonsoft.Json;
 using System;
@@ -15,7 +16,22 @@ namespace MasterDevs.ChromeDevTools.Tests
         [TestMethod]
         public void ShadowRootTypeTest()
         {
+            // Makes sure the "user-agent" property in the ShadowRootType class is serialized as "user-agent" and not
+            // as "userAgent"
             var value = JsonConvert.DeserializeObject<ShadowRootType>("\"user-agent\"");
         }
+
+        [TestMethod]
+        public void RunScriptCommandTest()
+        {
+            // The RunScriptCommand class has optional, non-nullable properties. This test makes sure they
+            // actually are nullable, and are not serialized if no explicit value is given.
+            var runScriptCommand = new RunScriptCommand();
+            var value = JsonConvert.SerializeObject(runScriptCommand);
+
+            // The only required parameter is ScriptId, so that's the only value which should be visible
+            // when using default serialization.
+            Assert.AreEqual("{\"ScriptId\":null}", value);
+        }
     }
 }
diff --git a/source/ProtocolGenerator/Program.cs b/source/ProtocolGenerator/Program.cs
index dab543f..1cddb26 100644
--- a/source/ProtocolGenerator/Program.cs
+++ b/source/ProtocolGenerator/Program.cs
@@ -216,6 +216,7 @@ namespace MasterDevs.ChromeDevTools.ProtocolGenerator
             var className = ToCamelCase(eventName) + EventSubclass;
             var sb = new StringBuilder();
             sb.AppendFormat("using MasterDevs.ChromeDevTools;");
+            sb.AppendFormat("using Newtonsoft.Json;");
             sb.AppendLine();
             sb.AppendLine();
             sb.AppendFormat("namespace {0}.{1}.{2}", RootNamespace, ns, domainDirectoryInfo.Name);
@@ -407,6 +408,16 @@ namespace MasterDevs.ChromeDevTools.ProtocolGenerator
             {
                 propertyType = GeneratePropertyType(propertyType.ToString());
             }
+
+            string[] referenceTypes = new string[] { "long", "bool" };
+
+            // If the property is optional, but a value type in .NET, make it nullable,
+            // so that the property becomes optional.
+            if (property.Optional && referenceTypes.Contains(propertyType))
+            {
+                propertyType += "?";
+            }
+
             sb.AppendLine("\t\t/// <summary>");
             sb.AppendFormat("\t\t/// Gets or sets {0}", property.Description ?? propertyName);
             sb.AppendLine();
@@ -417,6 +428,10 @@ namespace MasterDevs.ChromeDevTools.ProtocolGenerator
                 sb.AppendLine();
                 propertyName += "Child";
             }
+            else if (property.Optional)
+            {
+                sb.AppendLine("\t\t[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]");
+            }
             sb.AppendFormat("\t\tpublic {0} {1} {{ get; set; }}", propertyType, propertyName);
             sb.AppendLine();
         }
-- 
GitLab