我刚刚开始在Visual Studio 2017中使用我的旧解决方案.只需打开旧IDE中的解决方案即可无缝工作.c#应用程序项目现在默认为c#7.0编译器.这些项目的属性页面(编译/高级)可以轻松选择编译器的目标语言版本,默认为最新版本.
我找不到在asp.net web项目中启用c#7.0的方法.如果我写一个如下声明:
if (int.TryParse("1", out int myInt)) { ... }
Run Code Online (Sandbox Code Playgroud)
IDE警告我说我需要使用该语言的7+版本.
我对这个主题的研究表明,我应该定位web.config文件的system.codedom编译器区域中的特定c#版本,以便定位最新的Roslyn版本.
我现在拥有的是:
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs"
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
Run Code Online (Sandbox Code Playgroud)
针对c#6的目标是什么.只要我已经使用nuget下载了最新的Roslyn,c#7的正确设置是什么?
更新 下面是Web项目可用的编译选项的屏幕截图(它是意大利语VS2017,但应该很容易理解).没有可能在那里选择目标c#版本.
我必须向 Web REST 服务发送和接收 JSON 对象。这些对象由一个 DLL 生成,该 DLL 将大写字母(“PropertyName”)中的属性名称序列化,并且 Web 服务需要蛇形大小写(“property_name”)。另外,DLL 将数值序列化为浮点数,但 REST API 需要所有字符串。处理对象后,REST 服务返回蛇形大小写 JSON。
JSON 很复杂并且包含嵌套的数组和对象。在从 REST 字符串转换回来时,我可以跳过数字字符串的去字符串化,但我仍然必须将属性名称重新转换为大写字母。
我正在考虑使用 Newtonsoft Json 库编写一个辅助类,但它看起来比我预期的要棘手。转换器应接受 JSON 并返回 JSON。
例子:
{
"FirstObject": {
"NestedObject": {
"AttributeString": "ok",
"AttributeNumeric": 123.45
},
"OtherObject": [{
"ArrayVal": 100
}, {
"ArrayVal": 200
}]
}
}
Run Code Online (Sandbox Code Playgroud)
应该成为
{
"first_object": {
"nested_object": {
"attribute_string": "ok",
"attribute_numeric": "123.45"
},
"other_object": [{
"array_val": "100"
}, {
"array_val": "200"
}]
}
}
Run Code Online (Sandbox Code Playgroud)
我看到 Json.Net 库有SnakeCaseNamingStrategy和CamelCaseNamingStrategy类,所以想法是使用 …