我一直在网上寻找答案或例子,但还找不到一个.我只想更改默认的JSON序列化程序,用于在模型绑定到JSON.NET库时反序列化JSON.
我发现这个 SO帖子,但到目前为止无法实现它,我甚至看不到System.Net.Http.Formatters
命名空间,也看不到GlobalConfiguration
.
我错过了什么?
UPDATE
我有一个ASP.NET MVC项目,它基本上是一个MVC3项目.目前我的目标是.NET 4.5并使用ASP.NET MVC 5和相关的NuGet包.
我没有看到System.Web.Http程序集,也没有看到任何类似的命名空间.在这个上下文中,我想注入JSON.NET作为JSON类型请求的默认模型绑定器.
我目前在VS2010下有一个大型解决方案,有很多项目和依赖项.其中一些安装在GAC中,其中一些仅包含在"lib"文件夹中.我需要构建我的一个项目(特别是一个WinForms应用程序),以便能够在没有任何安装过程的任何非开发计算机上运行(当然除了.NET运行时),就像便携式应用程序一样.
为此,我需要将所有引用的DLL及其整个依赖关系树放在我的EXE的输出文件夹中.我可以通过在属性窗口中将依赖项标记为"复制本地"来执行此操作,但这仅适用于EXE项目的直接引用,因此远远不够.另一种方法是制作一个安装项目,但我的客户也想避免这种情况(在最终版本中我将使用ClickOnce).当然,我总是可以手工完成,手动收集所有DLL,但这真是一场噩梦.
是否有一些工具,msbuild技巧,命令行选项,强制Visual Studio在构建期间强制收集我的EXE的整个依赖关系树,并将它们复制到输出文件夹?这样我就可以将所有内容拼凑在一起并发送给我的客户.
我knockout
使用这样的记录方法安装了定义。
npm install @types/knockout
Run Code Online (Sandbox Code Playgroud)
它工作得很好,我可以像这样在任何地方导入它。
import * as ko from "knockout";
Run Code Online (Sandbox Code Playgroud)
但是,我坚持KnockoutStatic
使用一些自定义内容扩展界面。我正在尝试迁移一个基于<reference ... />
和namespace
的巨大 TS 应用程序以使用模块。之前,我很容易在任何地方声明了扩展接口,并且这些声明被合并了。假设我的扩展看起来像这样。
interface KnockoutStatic {
doSomething(): void;
}
Run Code Online (Sandbox Code Playgroud)
我试图创建一个KnockoutExtensions.d.ts
文件,我像这样声明它。
import "knockout";
declare module "knockout" {
export interface KnockoutStatic {
doSomething(): void;
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我将两者knockout
和我的扩展名都导入到某个地方时,TS 仍然无法解析doSomething
呼叫。
import * as ko from "knockout";
import "./KnockoutExtensions";
ko.doSomething(); // error
Run Code Online (Sandbox Code Playgroud)
使用 TypeScript 2.0 和新d.ts
子系统扩展库接口的正确方法是什么?
我正在使用安装了 TypeScript 2.0 的 Visual Studio …
我有 - 比方说 - 我的页面上有4个跨度.每个内容都由我的viewmodel中的knockout填充.有时几个内容的内容是空的.我想以一种漂亮的,逗号分隔的方式显示它们,考虑可能的空白.
我尝试了以下HTML和CSS.
版本1
它还显示空跨区的逗号
.comma:not(:last-child):after {
content: ", ";
}
Run Code Online (Sandbox Code Playgroud)
<span class="comma">A</span>
<span class="comma">B</span>
<span class="comma"></span>
<span class="comma">D</span>
Run Code Online (Sandbox Code Playgroud)
版本2
如果最后一个跨度为空,它会显示(可视)最后一个逗号.
.comma:not(:empty):not(:last-child):after {
content: ", ";
}
Run Code Online (Sandbox Code Playgroud)
<span class="comma">A</span>
<span class="comma">B</span>
<span class="comma">C</span>
<span class="comma"></span>
Run Code Online (Sandbox Code Playgroud)
无论差距在哪里(如果有的话),我怎么能调整它才能始终正确渲染?我只需要支持现代浏览器(IE9 +等).
我正在使用ReSharper(旧版本),当我使用PropertyInfo.DeclaringType
它时它常常警告我null
.
在第一眼和第二眼看来,这对我没有意义.这是真的,还是ReSharper有点愚蠢,并没有注意到它是一个PropertyInfo
,而不是一般MemberInfo
?
我想使用自定义助手来简化参数验证,就像这样。
public static void ThrowIfNull(this object value, string parameterName)
{
if (value == null)
{
throw new ArgumentNullException(parameterName);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,静态代码分析当然不知道我在使用此帮助程序时确实验证了公共方法中的输入,因此它会给我CA1062
有关未验证公共方法参数的错误。
特别的问题是这个。
有没有办法教代码分析器这个助手处理参数空验证?这个问题的正确解决方案是什么?
我觉得我一直在使用这些模式系列很多次,但是,对我来说很难看出差异,因为它们的定义非常相似.基本上似乎所有这些都是关于包装另一个或多个对象来扩展或用额外的东西包装他们的行为.
对于快速示例,在存储库模式上实现缓存机制似乎就是这种情况.这是一个C#
我可能会开始的快速示例代码.
public interface IRepository {
IEnumerable<T> GetItems<T>();
}
public class EntityFrameworkRepository : IRepository {
...
}
public class CachedRepository : IRepository {
private IRepository _repository;
private ICacheProvider _cache;
public CachedRepository(IRepository repository, ICacheProvider cache) {
this._repository = repository;
this._cache = cache;
}
public IEnumerable<T> GetItems<T>() {
...
}
}
Run Code Online (Sandbox Code Playgroud)
例如,这些模式中的哪一种适用于这种情况?任何人都可以简要地澄清理论和实践上的差异吗?
我想表示一个参数应该是一个对象或一个简单的值类型(数字,bool,字符串等),但不是一个函数.
如果我使用Object
,编译器让我分配一个函数.
var test: Object = () => "a";
Run Code Online (Sandbox Code Playgroud)
如果我使用any
,当然也是同样的结果.在这种情况下,是否有类型或技巧可以帮助我?
我的基本目标是在使用Knockout observable时保证安全,这样我就不会忘记打开它们的那些小小的问题:)
以下代码从Ajax json调用获取值,并应将其附加到具有相应值的div.事实是,它作为文本而不是html附加,所以我在页面上看到我的html作为文本.我怎样才能解决这个问题?
$.ajax({
url: "https://domain.com/maprequest.php",
type: "POST",
dataType: 'json',
data: JSON.stringify(url_array),
crossDomain: true,
success: function(response) {
$.each(response, function(k, v) {
if (v != "") {
$('.offer-list li .img a')[k].append("<div class='hoverbox'><img src='" + v + "' alt='hover' /></div>");
}
});
}
});
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个函数,我想表明它返回某种纯JavaScript对象.对象的签名是未知的,现在不是很有趣,只是它是一个普通的对象.我的意思是一个普通的对象,它满足例如jQuery的isPlainObject
功能.例如
{ a: 1, b: "b" }
Run Code Online (Sandbox Code Playgroud)
是一个普通的对象,但是
var obj = new MyClass();
Run Code Online (Sandbox Code Playgroud)
不是一个"普通"的对象,因为它constructor
不是Object
.jQuery做了一些更精确的工作$.isPlainObject
,但这不是问题的范围.
如果我尝试使用Object
类型,那么它也将与任何自定义对象兼容,因为它们是继承自的Object
.
有没有办法在TypeScript中定位"普通对象"类型?
我想要一个类型,例如满足这个.
var obj: PlainObject = { a: 1 }; // perfect
var obj2: PlainObject = new MyClass(); // compile-error: not a plain object
Run Code Online (Sandbox Code Playgroud)
用例
对于服务器端方法,我有一种强类型的存根,就像这样.这些存根是由我的一个代码生成器生成的,基于ASP.NET MVC控制器.
export class MyController {
...
static GetResult(id: number): JQueryPromise<PlainObject> {
return $.post("mycontroller/getresult", ...);
}
...
}
Run Code Online (Sandbox Code Playgroud)
现在,当我在消费者类中调用它时,我可以做这样的事情.
export class MyViewModelClass {
... …
Run Code Online (Sandbox Code Playgroud) c# ×5
typescript ×3
html ×2
javascript ×2
asp.net ×1
css ×1
css3 ×1
jquery ×1
json.net ×1
modelbinders ×1
msbuild ×1
reflection ×1
resharper ×1
validation ×1