类中的SerializeXmlNode函数Newtonsoft.Json.JsonConvert总是在序列化过程中将XML的最后一个子节点的值作为字符串类型输出,有时您可能需要将它们序列化为整数或布尔值.
示例代码:
<Object>
<ID>12</ID>
<Title>mytitle</Title>
<Visible>false</Visible>
</Object>
Run Code Online (Sandbox Code Playgroud)
输出:
{ "ID" : "12",
"Title" : "mytitle",
"Visible" : "false"
}
Run Code Online (Sandbox Code Playgroud)
期望的输出:
{ "ID" : 12,
"Title" : "mytitle",
"Visible" : false
}
Run Code Online (Sandbox Code Playgroud)
有没有办法强制XML节点序列化为整数或布尔值?
谢谢.
注意:当XML已经序列化为JSON字符串时,请避免发布变通办法,因为这些变通办法是我们愿意避免的.
在Windows API Code Pack for .NET Framework中,COM Interop接口的许多方法都使用MethodImplAttribute例如:
internal interface IShellItem
{
[PreserveSig]
[MethodImpl(
MethodImplOptions.InternalCall,
MethodCodeType = MethodCodeType.Runtime)]
HResult BindToHandler(
[In] IntPtr pbc, [In] ref Guid bhid, [In] ref Guid riid,
[Out, MarshalAs(UnmanagedType.Interface)] out IShellFolder ppv);
Run Code Online (Sandbox Code Playgroud)
MethodImplOptions.InternalCall价值文件说:
调用是内部的,也就是说,它调用在公共语言运行库中实现的方法.
指定方法实现由运行时提供.
但是,如果我理解正确,这两种说法都是正确的.据MSDN称,它IShellItem是在shell32.dll中实现的.shell32.dll不是CLR的一部分.有趣的是,并非所有方法都有MethodImplAttribute.IShellFolder是,IShellLinkW不,IShellLibrary做,IPersistStream不等.
为什么MethodImplAttribute应用于某些COM Interop接口?在这种情况下它意味着什么?它如何修改互操作的行为?
当使用Async.StartAsTask在F#中包装异步操作时,返回的类型将是Task<unit>.这使得接口的用户依赖于F#核心库.是否有建议的做法来避免这种情况,或者通常是否接受将其置于默认状态?
我正在使用.Net Standard 1.5并希望从我的配置中读取一些值.但是以下行
ConfigurationManager.AppSettings["Foo"]
Run Code Online (Sandbox Code Playgroud)
给我以下编译时错误:
CS7069引用类型'NameValueCollection'声称它在'System'中定义,但找不到它
我想也许在.Net Standard中有另一种方法可以从AppSettings中读取,但我还没有找到关于该主题的任何内容.
configurationmanager appsettings namevaluecollection .net-standard .net-standard-1.5
我想在WPF(.NET 4.6)应用程序和.NET Core应用程序之间共享项目.为此,我通过最初创建一个可移植的库并在Visual Studio 2015中将其转换为.NETStandard 1.3版来创建.NET标准库.
但是,.NETStandard库需要引用Entity Framework(例如),所以我在project.json中添加了这个依赖项,所有内容都很愉快.但是,当我实际运行应用程序时,只要实际尝试使用Entity Framework库加载数据,我就会收到File Not Found异常.这是预期的,因为使用.NETStandard时没有任何nuget包被复制到输出目录(不像使用nuget用于普通的.NET),所以我可以看到异常的原因.
当使用.NETStandard库并从.NET 4.6项目引用时,如何解决此问题/获取要复制到输出的nuget依赖项?(下面是我的project.json,并且很乐意在需要时添加更多代码).
{
"supports": {},
"dependencies": {
"Microsoft.EntityFrameworkCore.Design": "1.1.0",
"Microsoft.EntityFrameworkCore.Sqlite": "1.1.0",
"Microsoft.NETCore.Portable.Compatibility": "1.0.1",
"NETStandard.Library": "1.6.1"
},
"frameworks": {
"netstandard1.3": {}
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个控制台应用程序(在网络核心1.1中),它每隔1分钟在cron调度程序中安排一次.在应用程序内部有调用配置文件.我附上下面的代码.
public static T GetAppConfig<T>(string key, T defaultValue = default(T))
{
T value = default(T);
logger.Debug($"Reading App Config {key}");
try
{
var environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var builder = new ConfigurationBuilder()
.AddJsonFile($"appsettings.json", true, true)
.AddJsonFile($"appsettings.{environmentName}.json", true, true)
.AddEnvironmentVariables();
var configuration = builder.Build();
T setting = (T)Convert.ChangeType(configuration[key], typeof(T));
value = setting;
if (setting == null)
value = defaultValue;
}
catch (Exception ex)
{
logger.Warn(ex, $"An exception occured reading app key {key} default value {defaultValue} applied.");
value = defaultValue;
}
return value;
} …Run Code Online (Sandbox Code Playgroud) 我创建了一个带有netstandard2.0目标库而不是共享库或PCL库的Xamarin.Forms项目.到目前为止,这编译和工作.我正在使用Visual Studio 2017社区的up2date版本.
我还创建了一个WCF服务,它将托管在Windows本身(而不是IIS)上.我已将app.config配置为提供元数据交换端点:
<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
<system.serviceModel>
<services>
<service behaviorConfiguration="MM.Server.ServiceServerBehavior" name="MM.Server.ServiceServer">
<endpoint address="net.tcp://localhost:8730/MMServer/" binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IServiceServer" bindingName="NetTcpBinding_IServiceServer_EndPoint" contract="MM.Contracts.IServiceServer">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="http://localhost:8731/MMServer/mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8730/MMServer/"/>
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MM.Server.ServiceServerBehavior">
<serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:8731/MMServer/mex" />
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<netTcpBinding>
<binding name="NetTcpBinding_IServiceServer" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxConnections="10" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="16384"/>
<reliableSession ordered="true" …Run Code Online (Sandbox Code Playgroud) 我希望我的库能够使用各种版本的NuGet包,并在更改之间对API进行重大更改.我没有进一步调查,但这条路看起来很有希望:
虽然这可能看起来很复杂,但它比在单独的程序集中支持每个版本的更直接的方法有许多好处:
但是,目前还不清楚它是否可能.甚至在获得代理和检测当前版本之前,我就坚持了基础知识.
我甚PackageReference至无法向我的.csproj 添加多个节点,只有一个参考实际上有效.有一个解决方法来添加 NuGet不直接支持的外部别名,但我无法达到这一点,因为我无法获得两个引用.如果我以某种方式得到两个,我将无法区分它们.
我正在使用CsConsoleFormat库来格式化控制台输出.我希望直接支持流行的命令行软件包的所有相关版本,这样无论使用什么命令行解析库,都可以添加几乎没有编码的漂亮命令行帮助和类似的东西.
我想在我的案例中声称"我只支持最新版本"在某种程度上是可以接受的,但即使它更复杂,我也宁愿得到更广泛的支持.理想情况下,我想要一个NuGet包,它声明对最低支持版本的依赖,但支持最新版本的所有内容.
我有点工作,但有很多问题.有关详细信息,请参阅GitHub NuGet Home上的问题.
我希望在序列化数据时避免重新发明轮子.我知道一些方法来序列化彼此链接的对象,但它的范围从编写一些代码到编写大量用于序列化的代码,我想避免这种情况.必须有一些通用的解决方案.
假设我有这样的结构:
Person
bro = new Person { name = "bro", pos = new Pos { x = 1, y = 5 } },
sis = new Person { name = "sis", pos = new Pos { x = 2, y = 6 } },
mom = new Person { name = "mom", pos = new Pos { x = 3, y = 7 },
children = new List<Person> { bro, sis }
},
dad = new Person { name …Run Code Online (Sandbox Code Playgroud) 如果TL; DR:见最后一段.
Pure WPF"建议"将表示(控件,文本,图标)放入视图和命令逻辑(Execute,CanExecute方法)到代码隐藏中.除了将逻辑放入视图(CommandBindings)和代码隐藏是一个不受欢迎的练习之外,它对XAML重复没有任何帮助:每次命令都必须复制文本,图标,大图标,提示和许多其他属性用于:主菜单,上下文菜单,工具栏按钮,功能区按钮和其他控件.
看起来像第一个问题(真正分离的观点和逻辑)被解决DelegateCommand,RelayCommand并且接近这样.命令逻辑被移动到ViewModels(或MVVMC中的控制器),代码隐藏是清晰的,没有CommandBindings和其他无意义的视图.
但是,我找不到一个普遍接受的演示文稿重复问题的解决方案.我想分离命令演示(文本,图标)和命令逻辑(Execute,CanExecute方法).所有的代码,我能找到要么把文稿分为代码(通过创建一个RoutedCommand与像附加属性Label和Icon),或者把代码放到呈现(即,处理到的意见和代码隐藏).我也不喜欢.我认为演示应该完全在XAML中,代码应该完全在CS中(在ViewModel或Controller中).
问题:如何分离视图(XAML与对照其参考命令),命令呈现(标签,图标等等.对每一个指令)和(为C#代码命令的逻辑Execute,CanExecute在的ViewModels或控制器等)?