有没有办法忽略使用Json.NET序列化程序的get-only属性但不使用JsonIgnore属性?
例如,我有一个具有这些get属性的类:
public Keys Hotkey { get; set; }
public Keys KeyCode
{
get
{
return Hotkey & Keys.KeyCode;
}
}
public Keys ModifiersKeys
{
get
{
return Hotkey & Keys.Modifiers;
}
}
public bool Control
{
get
{
return (Hotkey & Keys.Control) == Keys.Control;
}
}
public bool Shift
{
get
{
return (Hotkey & Keys.Shift) == Keys.Shift;
}
}
public bool Alt
{
get
{
return (Hotkey & Keys.Alt) == Keys.Alt;
}
}
public …Run Code Online (Sandbox Code Playgroud) 是否可以创建可以限制数字的最小值或最大值的属性.
例:
[MinValue(1), MaxValue(50)]
public int Size { get; set; }
Run Code Online (Sandbox Code Playgroud)
当我做的Size = -3;价值Size必须是1.
我在谷歌搜索过,找不到关于这种行为的单一例子,也许是因为它无法制作?
我将在属性网格中使用这些属性,因此具有自动验证可以很方便.
目前我这样解决方法限制最小值:
private int size;
[DefaultValue(8)]
public int Size
{
get
{
return size;
}
set
{
size = Math.Max(value, 1);
}
}
Run Code Online (Sandbox Code Playgroud)
所以这就像MinValue(1)
我正在添加按钮以形成循环,我注意到添加单击事件处理程序会减慢应用程序的速度.后来我尝试鼠标点击事件而不是单击事件,它立即工作.
此截图显示了我的测试结果:
源代码:http://pastebin.com/qVewNm1u
1000事件处理程序的结果:
单击:2892ms MouseClick:1ms
我无法弄清楚为什么Click事件很慢.
编辑:如果我将构建平台目标更改为x64或任何CPU,结果更改:单击:5,MouseClick:9看起来像x86平台目标导致此问题但仍然x64结果与x86 MouseClick时间(1ms)相比也不太好.
Edit2:我改变了截图,现在它会显示更好的结果.
编辑3:https://connect.microsoft.com/VisualStudio/feedback/details/597039/winforms-click-event-slower-than-the-mouseclick-event
在我的C#项目中有APIKeys.cs文件,其中包含带有API密钥的const字符串.我希望这些字符串在Git服务器中是空的,但在我的本地计算机中有实际的API密钥.所以拉动项目的人可以毫无问题地编译它,而我的本地计算机仍然可以在同一个文件中使用API密钥.
如果我尝试上传带有空字符串的APIKeys.cs文件,那么我就不能拥有带有API密钥的本地文件,因为当我尝试推送它时,它将覆盖空的APIKeys.cs文件.此外,我也不能忽略此文件,因为它将从Git服务器中删除空的APIKeys.cs文件.
那么什么是这个问题的最佳自动化方法,它允许在服务器中使用空字符串的类文件,所以当人们拉动它并在本地计算机中拥有真正的类文件时,项目是可编译的?

在屏幕截图中,我用绿色矩形标记了空白空间,我希望在ToolStripMenuItem中左右空间大小相等,但右侧有更大的空白区域,我无法删除.
代码:
private void UpdateWorkflowsMenu()
{
((ToolStripDropDownMenu)tsddbWorkflows.DropDown).ShowImageMargin = false;
tsddbWorkflows.DropDownItems.Clear();
Program.HotkeyManager.Hotkeys.ForEach<HotkeySettings>(x =>
{
if (x.TaskSettings.Job != HotkeyType.None && (!Program.Settings.WorkflowsOnlyShowEdited || !x.TaskSettings.IsUsingDefaultSettings))
{
ToolStripMenuItem tsmi = new ToolStripMenuItem(x.TaskSettings.Description);
if (x.HotkeyInfo.IsValidHotkey) tsmi.ShortcutKeyDisplayString = " " + x.HotkeyInfo.ToString();
tsmi.Click += (sender, e) => HandleTask(x.TaskSettings);
tsddbWorkflows.DropDownItems.Add(tsmi);
}
});
tsddbWorkflows.Visible = tsddbWorkflows.DropDownItems.Count > 0;
}
Run Code Online (Sandbox Code Playgroud) Visual Studio 2013具有称为浏览器链接的功能,但我保存html文件时无法自动刷新浏览器.如果我需要使用浏览器链接的热键那么它有什么好处呢?因为我可以在浏览器中按F5而不是按浏览器链接的热键.但是如果在修改html文件时它自动刷新,那么它将非常方便.
所以我的问题是,当修改html文件时,是否可以自动化浏览器链接?
我正在尝试获取“我的云端硬盘”中的文件夹列表,并使用以下搜索查询请求“ https://www.googleapis.com/drive/v2/files ”:
mimeType = 'application/vnd.google-apps.folder' and trashed = false and 'me' in writers and sharedWithMe = false
Run Code Online (Sandbox Code Playgroud)
但它给出了这个错误:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "invalid",
"message": "Invalid Value",
"locationType": "parameter",
"location": "q"
}
],
"code": 400,
"message": "Invalid Value"
}
}
Run Code Online (Sandbox Code Playgroud)
但当我使用sharedWithMe = true它时效果很好。
这里https://developers.google.com/drive/web/search-parameters没有提到任何有关 sharedWithMe 的真实检查是不可能的。那么这是有意的行为吗?
有没有更好的方法来获取“我的云端硬盘”的文件夹列表而不是此查询?
让我们假设我喜欢这个属性,我用它来保存/加载设置:
public Options RectangleCaptureOptions { get; set; }
Run Code Online (Sandbox Code Playgroud)
我想更改属性名称RegionCaptureOptions而不是RectangleCaptureOptions.但是,如果我更改属性名称,那么Json .NET将无法找到它反序列化.
这里接受的答案不起作用:
.NET NewtonSoft JSON将映射反序列化为不同的属性名称
因为如果我使用JsonProperty:
[JsonProperty("RectangleCaptureOptions")]
public Options RegionCaptureOptions { get; set; }
Run Code Online (Sandbox Code Playgroud)
然后它还将序列化属性,因为RectangleCaptureOptions它是旧名称.
因此,当我更改变量或属性的名称时,仍然希望在反序列化时(RegionCaptureOptions或者RectangleCaptureOptions对于此示例)支持它们的旧命名,但在序列化(RegionCaptureOptions)时使用当前名称.这样,我可以在加载(反序列化)它们时为我的设置json文件提供向后兼容性支持.
我认为最干净的解决方案是制作自定义属性JsonAlternativeName,如下所示:
[JsonAlternativeName("RectangleCaptureOptions")]
public Options RegionCaptureOptions { get; set; }
Run Code Online (Sandbox Code Playgroud)
可选地,它可以具有多个参数支持,这样您可以添加多个替代名称.
但不确定如何完成它(或者根本不可能)并且无法在StackOverflow中找到类似的解决方案,因为在我发现的每个问题中,人们建议使用JsonProperty哪些对我的情况没有帮助.