diff --git a/compiler/cpp/src/thrift/generate/t_netstd_generator.cc b/compiler/cpp/src/thrift/generate/t_netstd_generator.cc
index ffe51ab..ba55960 100644
--- a/compiler/cpp/src/thrift/generate/t_netstd_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_netstd_generator.cc
@@ -51,10 +51,11 @@
     : t_oop_generator(program)
 {
     (void)option_string;
-
+    use_pascal_case_properties = false;
     union_ = false;
     serialize_ = false;
     wcf_ = false;
+
     wcf_namespace_.clear();
 
     map<string, string>::const_iterator iter;
@@ -75,9 +76,12 @@
             wcf_ = true;
             wcf_namespace_ = iter->second;
         }
-        else
+        else if (iter->first.compare("pascal") == 0)
         {
-            throw "unknown option netstd:" + iter->first;
+          use_pascal_case_properties = true;
+        }
+        else {
+          throw "unknown option netstd:" + iter->first;
         }
     }
 
@@ -188,6 +192,7 @@
     pverbose("- union ...... %s\n", (is_union_enabled() ? "ON" : "off"));
     pverbose("- serialize .. %s\n", (is_serialize_enabled() ? "ON" : "off"));
     pverbose("- wcf ........ %s\n", (is_wcf_enabled() ? "ON" : "off"));
+    pverbose("- pascal ..... %s\n", (use_pascal_case_properties ? "ON" : "off"));
 }
 
 string t_netstd_generator::normalize_name(string name)
@@ -2674,18 +2679,41 @@
     }
 }
 
-string t_netstd_generator::prop_name(t_field* tfield, bool suppress_mapping)
-{
-    string name(tfield->get_name());
-    if (suppress_mapping)
-    {
-        name[0] = toupper(name[0]);
+
+string t_netstd_generator::convert_to_pascal_case(const string& str) {
+  string out;
+  bool must_capitalize = true;
+  bool first_character = true;
+  for (auto it = str.begin(); it != str.end(); ++it) {
+    if (std::isalnum(*it)) {
+      if (must_capitalize) {
+        out.append(1, (char)::toupper(*it));
+        must_capitalize = false;
+      } else {
+        out.append(1, *it);
+      }
+    } else {
+      if (first_character) //this is a private variable and should not be PascalCased
+        return str;
+      must_capitalize = true;
     }
-    else
-    {
-        name = get_mapped_member_name(name);
-    }
-    return name;
+    first_character = false;
+  }
+  return out;
+}
+
+
+string t_netstd_generator::prop_name(t_field* tfield, bool suppress_mapping) {
+  string name(tfield->get_name());
+  if (suppress_mapping) {
+    name[0] = toupper(name[0]);
+    if (use_pascal_case_properties)
+      name = t_netstd_generator::convert_to_pascal_case(name);
+  } else {
+    name = get_mapped_member_name(name);
+  }
+
+  return name;
 }
 
 string t_netstd_generator::type_name(t_type* ttype)
@@ -3020,4 +3048,5 @@
     "    wcf:             Adds bindings for WCF to generated classes.\n"
     "    serial:          Add serialization support to generated classes.\n"
     "    union:           Use new union typing, which includes a static read function for union types.\n"
+    "    pascal:          Generate Pascal Case property names according to Microsoft naming convention.\n"
 )
diff --git a/compiler/cpp/src/thrift/generate/t_netstd_generator.h b/compiler/cpp/src/thrift/generate/t_netstd_generator.h
index fd9e6c0..1e23f91 100644
--- a/compiler/cpp/src/thrift/generate/t_netstd_generator.h
+++ b/compiler/cpp/src/thrift/generate/t_netstd_generator.h
@@ -134,6 +134,7 @@
   string argument_list(t_struct* tstruct);
   string type_to_enum(t_type* ttype);
   string prop_name(t_field* tfield, bool suppress_mapping = false);
+  string convert_to_pascal_case(const string& str);
   string get_enum_class_name(t_type* type);
 
 private:
@@ -145,6 +146,7 @@
   bool hashcode_;
   bool serialize_;
   bool wcf_;
+  bool use_pascal_case_properties;
 
   string wcf_namespace_;
   map<string, int> netstd_keywords;
diff --git a/test/netstd/Server/Server.csproj b/test/netstd/Server/Server.csproj
index 4f2463c..5d33aa0 100644
--- a/test/netstd/Server/Server.csproj
+++ b/test/netstd/Server/Server.csproj
@@ -47,6 +47,6 @@
     </Exec>
     <Exec Condition="Exists('$(PathToThrift)')" Command="&quot;$(PathToThrift)&quot; -out $(ProjectDir) -gen netstd:wcf,union,serial -r ./../../ThriftTest.thrift" />
     <Exec Condition="Exists('thrift')" Command="thrift -out $(ProjectDir) -gen netstd:wcf,union,serial -r ./../../ThriftTest.thrift" />
-    <Exec Condition="Exists('$(ProjectDir)/../../../compiler/cpp/thrift')" Command="$(ProjectDir)/../../../compiler/cpp/thrift -out $(ProjectDir) -gen netstd:wcf,union,serial -r ./../../ThriftTest.thrift" />
+    <Exec Condition="Exists('$(ProjectDir)/../../../compiler/cpp/thrift')" Command="$(ProjectDir)/../../../compiler/cpp/thrift -out $(ProjectDir) -gen netstd:wcf,union,serial,pascal -r ./../../ThriftTest.thrift" />
   </Target>
-</Project>
\ No newline at end of file
+</Project>
diff --git a/test/netstd/Server/TestServer.cs b/test/netstd/Server/TestServer.cs
index 68461dc..493d89d 100644
--- a/test/netstd/Server/TestServer.cs
+++ b/test/netstd/Server/TestServer.cs
@@ -254,20 +254,20 @@
 
             public Task<Xtruct> testStructAsync(Xtruct thing, CancellationToken cancellationToken)
             {
-                logger.Invoke("testStruct({{\"{0}\", {1}, {2}, {3}}})", thing.String_thing, thing.Byte_thing, thing.I32_thing, thing.I64_thing);
+                logger.Invoke("testStruct({{\"{0}\", {1}, {2}, {3}}})", thing.StringThing, thing.ByteThing, thing.I32Thing, thing.I64Thing);
                 return Task.FromResult(thing);
             }
 
             public Task<Xtruct2> testNestAsync(Xtruct2 nest, CancellationToken cancellationToken)
             {
-                var thing = nest.Struct_thing;
+                var thing = nest.StructThing;
                 logger.Invoke("testNest({{{0}, {{\"{1}\", {2}, {3}, {4}, {5}}}}})",
-                    nest.Byte_thing,
-                    thing.String_thing,
-                    thing.Byte_thing,
-                    thing.I32_thing,
-                    thing.I64_thing,
-                    nest.I32_thing);
+                    nest.ByteThing,
+                    thing.StringThing,
+                    thing.ByteThing,
+                    thing.I32Thing,
+                    thing.I64Thing,
+                    nest.I32Thing);
                 return Task.FromResult(nest);
             }
 
@@ -429,10 +429,10 @@
                 logger.Invoke("testMulti()");
 
                 var hello = new Xtruct(); ;
-                hello.String_thing = "Hello2";
-                hello.Byte_thing = arg0;
-                hello.I32_thing = arg1;
-                hello.I64_thing = arg2;
+                hello.StringThing = "Hello2";
+                hello.ByteThing = arg0;
+                hello.I32Thing = arg1;
+                hello.I64Thing = arg2;
                 return Task.FromResult(hello);
             }
 
@@ -473,12 +473,12 @@
                     var x = new Xception2
                     {
                         ErrorCode = 2002,
-                        Struct_thing = new Xtruct { String_thing = "This is an Xception2" }
+                        StructThing = new Xtruct { StringThing = "This is an Xception2" }
                     };
                     throw x;
                 }
 
-                var result = new Xtruct { String_thing = arg1 };
+                var result = new Xtruct { StringThing = arg1 };
                 return Task.FromResult(result);
             }
 
