小编Kev*_*ose的帖子

使用JSON.NET的序列化字段的顺序

有没有办法使用JSON.NET指定序列化JSON对象中的字段顺序?

指定单个字段始终首先出现就足够了.

c# json json.net

122
推荐指数
6
解决办法
6万
查看次数

你如何跨域使用window.postMessage?

看起来像window.postMessage的目的是允许在不同域上托管的窗口/框架之间进行安全通信,但实际上它似乎并不允许在Chrome中使用.

这是场景:

  1. 在域A的页面中嵌入<iframe>(带有src域B *)
  2. <iframe>最终主要是一个<script>标签,最后执行...
  3. 我调用window.postMessage(some_data,page_on_A)

<iframe>绝对是在域B的上下文中,我已经确认<iframe>中的嵌入式javascript正确执行并postMessage使用正确的值进行调用.

我在Chrome中收到此错误消息:

无法发布消息到一个.收件人有产地.

这是在A页面上注册消息事件监听器的代码:

window.addEventListener(
  "message",
  function (event) {
    // Do something
  },
  false);
Run Code Online (Sandbox Code Playgroud)

我也尝试过调用window.postMessage(some_data, '*'),但所有这一切都是为了抑制错误.

我只是忽略了这一点,是window.postMessage(...)不是为了这个吗?或者我只是做得非常糟糕?

*Mime-type text/html,它必须保留.

javascript xss html5 google-chrome

81
推荐指数
2
解决办法
13万
查看次数

内部和外部的碎片

任何人都可以告诉我内部和外部碎片之间的区别,同时分配文件的磁盘空间?

filesystems disk fragmentation

72
推荐指数
3
解决办法
9万
查看次数

将System.Drawing.Icon转换为System.Media.ImageSource

我有一个IntPtr封装在一个非托管/管理边界上,对应一个Icon Handle.通过FromHandle()方法将它转换为Icon是微不足道的,直到最近才令人满意.

基本上,我已经有足够的线程怪异了,因为我一直在玩MTA/STA舞蹈以保持托管的WinForm不会破坏应用程序的主要(WPF-tastic)UI太脆弱而无法坚持.所以WinForm必须要去.

那么,我怎样才能获得Icon的ImageSource版本?

注意,我尝试过ImageSourceConverter无济于事.

顺便说一下,我可以获得一些但不是所有涉及的图标的底层资源,它们通常存在于我的应用程序的程序集之外(事实上,它们通常存在于非​​托管的dll中).

c# windows wpf winforms

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

使用C#中的反射识别自定义索引器

我有一个类似自定义索引器的类

public string this[VehicleProperty property]
{
  // Code
}
Run Code Online (Sandbox Code Playgroud)

如何在typeof(MyClass).GetProperties()的结果中识别自定义索引器?

.net c#

29
推荐指数
2
解决办法
6918
查看次数

如何通过JIT编译器编译泛型?

我知道泛型是由JIT编译的(就像其他所有东西一样),与编译代码时生成的模板形成对比.
问题是可以使用反射在运行时创建新的泛型类型.
这当然会影响通用的约束.哪个已经通过了语义解析器.

有人能解释一下这是如何处理的吗?究竟发生了什么?
(代码生成和语义检查)

c# compiler-construction generics jit

28
推荐指数
1
解决办法
5038
查看次数

如何访问另一个程序集中的类以进行单元测试?

我正在开始对Visual-Studio 2008方式进行单元测试,我想知道class为了测试目的,完成跨装配访问的最佳方法是什么.

基本上,我在一个解决方案中有两个项目:

  1. MyProject(C#)
  2. MyProjectTests(C#测试项目)

MyProject中的所有内容当前都具有默认的可访问性,如果我没记错,这意味着一切都是有效的internal.我主要是想在这个class级别进行测试,但是有一些delegates涉及.

将来某个时候可能会有一个外部API,但我大约有20%的功能完整(至少在纸面上)并且我非常谨慎地在这个未经测试的核心上层叠更多代码.因此,我想在应用程序完成足够传统(读取:坏和/或懒惰)功能测试之前完成一些测试,并且肯定在版本n + 1外部API启动之前完成.

除了直接的答案,我们将非常感谢解决方案的一个例子.

c# unit-testing .net-assembly

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

获取MemberRef元数据令牌的字段是指

公平的警告,这可能有点深奥和棘手.

鉴于从CIL流中提取的MemberRef(下面有更多解释),您如何确定它指向的哪个字段(如果有的FieldInfo话)(并得到它)?

这是我到目前为止所发现的

根据ECMA 335标准,MemberRef是一个元数据标记,基本上是表中的查找,可以指向字段元数据标记或方法元数据标记.从0x0A开始的任何元数据标记都是MemberRef.

在此输入图像描述

我之前没有遇到其中的一个,但它们似乎并不罕见.我能够通过在方法中使用以下匿名类型来生成一个:

new
{
    A = new DateTime(1234, 5, 6, 7, 8, 9, DateTimeKind.Utc),
    B = (DateTime?)null
}
Run Code Online (Sandbox Code Playgroud)

当我通过反射获取方法体(获取PropertyInfo,获取GetMethod,获取MethodBody,然后最终得到IL)A的get方法是:

[2, 123, 79, 0, 0, 10, 42]
Run Code Online (Sandbox Code Playgroud)

哪个转换为:

ldarg.0
ldfld 0x0A00004F
ret
Run Code Online (Sandbox Code Playgroud)

如果我反思并获得支持字段(依赖于名称相似性来选择<A>i__Field,没有任何算法)我看到MetadataToken0x04000056.

请注意,生成的令牌可能在编译之间有所不同.

以0x04开头的标记是一个字段: 在此输入图像描述

大多数情况下(对于我的有限测试中的所有非匿名对象,实际上)IL包含字段元数据令牌.这很容易变成一个FieldInfovia Module.ResolveField(int),弄清楚如何处理一个MemberRef会让我感到沮丧.

循环使用Module上的其他ResolveXXX方法,唯一可以对MemberRef执行任何操作的方法是ResolveSignature.在上面的MemberRef上运行时,它返回一个数组[6, 19, 0].我真的不知道该怎么做.

我正在处理的代码尚未完成,但是公开的.运行此测试可以看到错误,导致在此行上的字段查找失败时抛出异常.请注意,测试本身尚未完成,预计它不会成功,但也不应该死在那里.

任何人都知道如何制作该签名,或者FieldInfo从MemberRef …

.net c# reflection cil

20
推荐指数
1
解决办法
1670
查看次数

表单被随机提交为GET而不是POST

这有点疯狂.

这是我们的OpenID提供商的表格:

  <form method="post" action="/affiliate/form/login/submit?affId=7" autocomplete="off">
    <table class="position-table">
      <tr>
        <td class="input-td">
          <input class="framed-text-field" type="text" name="email" id="email" value="" maxlength="100" />
          <span class="form-help">name@example.com</span>
        </td>
        <td class="input-td">
          <input class="framed-text-field" type="password" name="password" id="password" />
          <span class="form-help">Password</span>
        </td>
        <td></td>
        <td class="input-td">
          <input type="submit" class="affiliate-button" value="Sign In" />
        </td>
      </tr>
    </table>
    <input type="hidden" id="fkey" name="fkey" value="REDACTED" />
  </form>
Run Code Online (Sandbox Code Playgroud)

此表单是/affiliate/form/loginiframe中托管的页面(at )的一部分.iframe通过HTTPS(HTTP上的主机页面)提供.您可以/users/login使用隐身/私人浏览/色情模式浏览器窗口查看此操作.

所以这是问题,定期(但不一致)用户将GET而不是POST到此URL.这是一个荒谬的低发生率,迄今为止影响的用户总数不到50个.

我很想知道dev/null这些错误(没有行动方法等等),但......

这些看起来像真正的用户:广泛的IP,各种有效的用户代理和可信的时间.令人沮丧的是,相同的用户有时会稍后成功地发布相同的表单.

可能导致这种情况的任何想法?

我已经拥有并丢弃的想法:

  • HTTPS加速器或负载均衡器处理请求
    • 检查传入的日志,它们匹配到应用程序的内容
  • ASP/.NET请求解析错误
    • 比较传入和记录的Request值,它们匹配
  • 越野车浏览器
    • 多个Chrome版本,FireFox 4,Safari和Mobile Safari中记录的事件
  • 机器人或糟糕的浏览器扩展 …

html browser asp.net-mvc-3

17
推荐指数
1
解决办法
3977
查看次数

寻找一种快速简便的方法来合并POCO上的所有属性

我有一些普通的类,有一堆简单的属性(简单的{get; set;}声明).所有属性都可以为空(或等效地,引用类型).

例如:

class POCO
{
  int? Field1 { get; set; }
  string Field2 { get; set; }
  ... etc ...
}
Run Code Online (Sandbox Code Playgroud)

我有一个场景,我正在逐步构建这些POCO,最后我想让其中一个包含所有非空字段.

一些说明性代码:

POCO o1 = LoadFields1To3();
POCO o2 = LoadFields4To5();
POCO o3 = LoadFields6To9();
... etc ...
Run Code Online (Sandbox Code Playgroud)

我们处于这种情况是因为某些字段是从SQL加载的(有时是不同的查询),而有些是从内存数据结构中加载的.我在这里重新使用POCO类型来避免一堆其他无意义的类(静态类型对于Dapper来说非常有用,而且一般来说).

我正在寻找的是将这些对象的属性合并为具有非null属性的单个属性的好方法.

就像是:

POCO final = o1.UnionProperties(o2).UnionProperties(o3) // and so on
Run Code Online (Sandbox Code Playgroud)

我能够保证在多个对象上没有字段为非null.虽然我假设一个解决方案会采用最左边的非空字段,但实际上并不是必需的.

我知道我可以写一些反射代码来做到这一点,但它有点讨厌和缓慢.

这确实需要通用,因为虽然我从不打算合并不同类型的对象,但是这种方法适用的类型非常多.

我想知道是否有一些更聪明的方式,也许 AB用动态?

c# reflection

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