这是我的班级:
public class Command
{
[XmlArray(IsNullable = true)]
public List<Parameter> To { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当我序列化这个类的对象时:
var s = new XmlSerializer(typeof(Command));
s.Serialize(Console.Out, new Command());
Run Code Online (Sandbox Code Playgroud)
它按预期打印(省略xml标头和默认MS名称空间):
<Command><To xsi:nil="true" /></Command>
Run Code Online (Sandbox Code Playgroud)
当我拿这个xml并试图反序列化它时我被卡住了,因为它总是打印"Not null":
var t = s.Deserialize(...);
if (t.To == null)
Console.WriteLine("Null");
else
Console.WriteLine("Not null");
Run Code Online (Sandbox Code Playgroud)
如果强制反序列化器使我的列表为null,如果它在xml中为null?
问题在标题中.3.0还是4.0?
我有Web API的奇怪行为,.Net 4.5.2.如果可选字符串参数为null,则ModelState没有错误.如果它不为空且不为空,则不会再出现错误.但如果它只是一个空字符串我有模型状态错误.
为什么我得到它以及如何禁用它?
假设应用程序服务localhost:82我有这些结果:
Url: http://localhost:82/
Response: "null"
Url: http://localhost:82/?q=1
Response: "1"
Url: http://localhost:82/?q=
Response: {
"Message": "The request is invalid.",
"ModelState": {
"q.String": [
"A value is required but was not present in the request."
]
}
}
Run Code Online (Sandbox Code Playgroud)
测试控制器和配置如下.在VS2013中,这被简化为"WebApi"的默认"Asp.net Web应用程序".
namespace Web.Api.Test.Controllers
{
using System.Web.Http;
[Route]
public class HomeController : ApiController
{
[Route]
[HttpGet]
public IHttpActionResult Search(string q = default(string))
{
return this.ModelState.IsValid
? this.Ok(q ?? "null")
: (IHttpActionResult)this.BadRequest(this.ModelState);
}
}
}
Run Code Online (Sandbox Code Playgroud)
Startup.cs是:
using Microsoft.Owin;
using …Run Code Online (Sandbox Code Playgroud) 我有自己的Visual Studio 2008 SP1自定义工具.它由5个程序集组成:3个程序集,其中包含在我的其他项目中大量使用的代码,1个VS2008 SDK上的程序集包装程序以及使用该工具的程序集.
如果我从visual studio调试我的工具,使用命令行"C:\ Program Files(x86)\ Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe"和参数"/ ranu /"使用"运行外部程序"选项rootsuff Exp"一切都很完美.
在那之后,我正在尝试将它部署到我的工作VS副本,而不是实验配置单元,执行:gacutil /i Asm1.dll对于我的所有程序集,RegAsm Asm1.dll仅用于使用自定义工具进行装配.utils都没有打印任何错误,所有工作都按计划进行,甚至出现了注册表项.但是我的工具不起作用(发生错误"在此系统上找不到自定义工具'TransportGeneratorTool'")即使在PC重启后也是如此.我做错了什么?
Wrapper看起来像那样:
[ComVisible(true)]
public abstract class CustomToolBase : IVsSingleFileGenerator, IObjectWithSite
{
#region IVsSingleFileGenerator Members
int IVsSingleFileGenerator.DefaultExtension(out string pbstrDefaultExtension)
{
pbstrDefaultExtension = ".cs";
return 0;
}
int IVsSingleFileGenerator.Generate(string wszInputFilePath, string bstrInputFileContents, string wszDefaultNamespace, IntPtr[] rgbOutputFileContents, out uint pcbOutput, IVsGeneratorProgress pGenerateProgress)
{
GenerationEventArgs gea = new GenerationEventArgs(
bstrInputFileContents,
wszInputFilePath,
wszDefaultNamespace,
new ServiceProvider(Site as Microsoft.VisualStudio.OLE.Interop.IServiceProvider)
.GetService(typeof(ProjectItem)) as ProjectItem,
new GenerationProgressFacade(pGenerateProgress) …Run Code Online (Sandbox Code Playgroud)