diff --git a/source/ChromeDevTools/MasterDevs.ChromeDevTools.csproj b/source/ChromeDevTools/MasterDevs.ChromeDevTools.csproj
index eb6cc32e09e1abe10b59e03eb7cdb50f1b4e44c4..ac95b2994a8b42714ce5fb656ac01056af988679 100644
--- a/source/ChromeDevTools/MasterDevs.ChromeDevTools.csproj
+++ b/source/ChromeDevTools/MasterDevs.ChromeDevTools.csproj
@@ -38,14 +38,12 @@
     <AssemblyOriginatorKeyFile>MasterDevs.ChromeDevTools.snk</AssemblyOriginatorKeyFile>
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="Newtonsoft.Json">
-      <HintPath>..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll</HintPath>
-    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
     <Reference Include="System.Net.Http">
       <HintPath>..\..\..\..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Net.Http.dll</HintPath>
     </Reference>
+    <Reference Include="System.Runtime.Serialization" />
     <Reference Include="System.Xml.Linq" />
     <Reference Include="System.Data.DataSetExtensions" />
     <Reference Include="Microsoft.CSharp" />
diff --git a/source/ChromeDevTools/MasterDevs.ChromeDevTools.project.json b/source/ChromeDevTools/MasterDevs.ChromeDevTools.project.json
index faf891318d90304e36248428504747b4378ff0e9..c3337250176a3f97b3e409d646de1762f2cb3cd5 100644
--- a/source/ChromeDevTools/MasterDevs.ChromeDevTools.project.json
+++ b/source/ChromeDevTools/MasterDevs.ChromeDevTools.project.json
@@ -1,8 +1,11 @@
-{
+{
   "frameworks": {
     "net45": {}
   },
   "runtimes": {
     "win": {}
+  },
+  "dependencies": {
+    "Newtonsoft.Json": "9.0.1"
   }
 }
\ No newline at end of file
diff --git a/source/ChromeDevTools/project.json b/source/ChromeDevTools/project.json
index 14e7284cdb1f065fa54360805235c360ab24cfa3..eb74ee882a2390d03b99feade5988704cb49d078 100644
--- a/source/ChromeDevTools/project.json
+++ b/source/ChromeDevTools/project.json
@@ -21,7 +21,8 @@
         "System.Diagnostics.Process": "4.1.0",
         "System.Runtime.InteropServices": "4.1.0",
         "System.Net.Http": "4.1.0",
-        "System.Threading.Thread": "4.0.0"
+        "System.Threading.Thread": "4.0.0",
+        "System.Runtime.Serialization.Primitives": "4.1.1"
       }
     },
     "net45": {
@@ -29,7 +30,8 @@
         "WebSocket4Net": "0.14.1"
       },
       "frameworkAssemblies": {
-        "System.Net.Http": "4.0.0.0"
+        "System.Net.Http": "4.0.0.0",
+        "System.Runtime.Serialization": "4.0.0.0"
       }
     }
   }
diff --git a/source/MasterDevs.ChromeDevTools.Tests/MasterDevs.ChromeDevTools.Tests.csproj b/source/MasterDevs.ChromeDevTools.Tests/MasterDevs.ChromeDevTools.Tests.csproj
index 87d4cc0e5182f90ae15e2ca1050f8f4789618ff9..3710ca9854c97797aae425a5fcf522c66d767b97 100644
--- a/source/MasterDevs.ChromeDevTools.Tests/MasterDevs.ChromeDevTools.Tests.csproj
+++ b/source/MasterDevs.ChromeDevTools.Tests/MasterDevs.ChromeDevTools.Tests.csproj
@@ -35,6 +35,10 @@
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+      <HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
     <Reference Include="System" />
   </ItemGroup>
   <Choose>
@@ -52,6 +56,7 @@
   <ItemGroup>
     <Compile Include="CommandResponseFactoryTests.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="SerializationTests.cs" />
   </ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\ChromeDevTools\MasterDevs.ChromeDevTools.csproj">
@@ -60,6 +65,7 @@
     </ProjectReference>
   </ItemGroup>
   <ItemGroup>
+    <None Include="packages.config" />
     <None Include="response-1.json">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
diff --git a/source/MasterDevs.ChromeDevTools.Tests/SerializationTests.cs b/source/MasterDevs.ChromeDevTools.Tests/SerializationTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..f0bb3f49e6ac54e496a6e6633c028d487560b2f4
--- /dev/null
+++ b/source/MasterDevs.ChromeDevTools.Tests/SerializationTests.cs
@@ -0,0 +1,21 @@
+using MasterDevs.ChromeDevTools.Protocol.Chrome.DOM;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MasterDevs.ChromeDevTools.Tests
+{
+    [TestClass]
+    public class SerializationTests
+    {
+        [TestMethod]
+        public void ShadowRootTypeTest()
+        {
+            var value = JsonConvert.DeserializeObject<ShadowRootType>("\"user-agent\"");
+        }
+    }
+}
diff --git a/source/MasterDevs.ChromeDevTools.Tests/packages.config b/source/MasterDevs.ChromeDevTools.Tests/packages.config
new file mode 100644
index 0000000000000000000000000000000000000000..7ee8c105235dec73a2726e7ccf874eeded1a5ea0
--- /dev/null
+++ b/source/MasterDevs.ChromeDevTools.Tests/packages.config
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" />
+</packages>
\ No newline at end of file
diff --git a/source/ProtocolGenerator/Program.cs b/source/ProtocolGenerator/Program.cs
index e2806e21c5cdffb31b4d5ca25e3d5871d7553de3..dab543f475c19994b53761b7e517d344a4a6f548 100644
--- a/source/ProtocolGenerator/Program.cs
+++ b/source/ProtocolGenerator/Program.cs
@@ -474,7 +474,10 @@ namespace MasterDevs.ChromeDevTools.ProtocolGenerator
         {
             var enumName = type.Name;
             StringBuilder sb = new StringBuilder();
-            sb.AppendFormat("using MasterDevs.ChromeDevTools;");
+            sb.AppendLine("using MasterDevs.ChromeDevTools;");
+            sb.AppendLine("using Newtonsoft.Json;");
+            sb.AppendLine("using Newtonsoft.Json.Converters;");
+            sb.AppendLine("using System.Runtime.Serialization;");
             sb.AppendLine();
             sb.AppendLine();
             sb.AppendFormat("namespace {0}.{1}.{2}", RootNamespace, ns, domainDirectoryInfo.Name);
@@ -483,11 +486,18 @@ namespace MasterDevs.ChromeDevTools.ProtocolGenerator
             sb.AppendFormat("\t/// {0}", type.Description);
             sb.AppendLine();
             sb.AppendLine("\t/// </summary>");
+            sb.AppendLine("\t[JsonConverter(typeof(StringEnumConverter))]");
             sb.AppendFormat("\tpublic enum {0}", enumName);
             sb.AppendLine();
             sb.AppendLine("\t{");
             foreach (var enumValueName in type.Enum)
             {
+                if (enumValueName.Contains("-"))
+                {
+                    sb.AppendFormat("\t\t\t[EnumMember(Value = \"{0}\")]", enumValueName);
+                    sb.AppendLine();
+                }
+
                 sb.AppendFormat("\t\t\t{0},", ToCamelCase(enumValueName.Replace("-", "_")));
                 sb.AppendLine();
             }