小编Jae*_*aex的帖子

有没有办法在不使用JsonIgnore属性的情况下忽略Json.NET中的get-only属性?

有没有办法忽略使用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)

c# json json.net

41
推荐指数
4
解决办法
2万
查看次数

属性的MinValue和MaxValue属性

是否可以创建可以限制数字的最小值或最大值的属性.

例:

[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)

c# attributes

14
推荐指数
1
解决办法
3万
查看次数

为什么Winforms Click事件比MouseClick事件慢?

我正在添加按钮以形成循环,我注意到添加单击事件处理程序会减慢应用程序的速度.后来我尝试鼠标点击事件而不是单击事件,它立即工作.

此截图显示了我的测试结果: 替代文字 源代码: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

.net c# events click winforms

7
推荐指数
1
解决办法
2486
查看次数

在Git中隐藏API密钥的正确方法

在我的C#项目中有APIKeys.cs文件,其中包含带有API密钥的const字符串.我希望这些字符串在Git服务器中是空的,但在我的本地计算机中有实际的API密钥.所以拉动项目的人可以毫无问题地编译它,而我的本地计算机仍然可以在同一个文件中使用API​​密钥.

如果我尝试上传带有空字符串的APIKeys.cs文件,那么我就不能拥有带有API密钥的本地文件,因为当我尝试推送它时,它将覆盖空的APIKeys.cs文件.此外,我也不能忽略此文件,因为它将从Git服务器中删除空的APIKeys.cs文件.

那么什么是这个问题的最佳自动化方法,它允许在服务器中使用空字符串的类文件,所以当人们拉动它并在本地计算机中拥有真正的类文件时,项目是可编译的?

c# git api-key

7
推荐指数
2
解决办法
3477
查看次数

如何在ToolStripMenuItem中删除右侧空白区域

SS

在屏幕截图中,我用绿色矩形标记了空白空间,我希望在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)

.net c# toolstripitem winforms

6
推荐指数
1
解决办法
930
查看次数

修改html文件时Visual Studio 2013自动浏览器链接

Visual Studio 2013具有称为浏览器链接的功能,但我保存html文件时无法自动刷新浏览器.如果我需要使用浏览器链接的热键那么它有什么好处呢?因为我可以在浏览器中按F5而不是按浏览器链接的热键.但是如果在修改html文件时它自动刷新,那么它将非常方便.

所以我的问题是,当修改html文件时,是否可以自动化浏览器链接?

html visual-studio-2013 browser-link

5
推荐指数
1
解决办法
4156
查看次数

Google Drive SDK“sharedWithMe = false”搜索查询不起作用

我正在尝试获取“我的云端硬盘”中的文件夹列表,并使用以下搜索查询请求“ 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 的真实检查是不可能的。那么这是有意的行为吗?

有没有更好的方法来获取“我的云端硬盘”的文件夹列表而不是此查询?

google-drive-api

5
推荐指数
1
解决办法
648
查看次数

Json.NET向后兼容性:编写新的属性名称,但要读取新属性或旧属性

让我们假设我喜欢这个属性,我用它来保存/加载设置:

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哪些对我的情况没有帮助.

c# serialization json json.net

5
推荐指数
0
解决办法
161
查看次数