我知道ASP.NET Web API本身使用Json.NET来(反)序列化对象,但有没有办法指定JsonSerializerSettings你想要它使用的对象?
例如,如果我想将type信息包含在序列化的JSON字符串中该怎么办?通常我会在.Serialize()调用中注入设置,但Web API会默默地执行此操作.我找不到手动注入设置的方法.
如果我弄错了,请纠正我,但AFAIK,标记中未知的HTML标签(即HTML规范中未定义的标签,比如说<foobar>),最终将被视为<div>HTML 5浏览器环境中的常规标签.
我在想:这种做法有多可支持?我的意思是,如果我在标记中使用未知的HTML标记,我会发现什么陷阱?快速恐龙会在接下来的几秒钟内扑向我吗?
我问的原因是,如果这些标签遵循<div>,我可能会以更加语义的方式使用这些标签,比如分配识别模块的类名.看看这篇文章,例如,一个.media类.现在如果不是将CSS写入目标.media,而是将其作为目标<media>呢?在我看来,这使得标记更具可读性和可维护性,但我确实认为它不是"正确的"HTML.
为了保持透明,几年前我确实发现了这个问题.它已被关闭作为偏离主题,但我觉得我在自己的措辞中有一个有效的观点.我承认,这是一个非常接近的重复,但它是在几年前,所以Web开发人员对该主题的一般环境观可能会发生变化.
我最近一直在忙着研究lambda表达式,并且我有一些特定的功能,我一直想要学习,但似乎无法做出正面或反面.
假设我的代码中有以下逻辑:
List<A> foo; // assuming this is populated
string[] bar = foo.Select<A,string>(x => x.StringProperty).ToArray<string>();
Run Code Online (Sandbox Code Playgroud)
现在,我想将整个操作抽象为一个处理程序方法,以便我可以这样做:
string[] bar = MakeArray<A,string>(foo, x => x.StringProperty);
int[] foobar = MakeArray<A,int>(foo, x => x.IntegerProperty);
Run Code Online (Sandbox Code Playgroud)
如何编写该方法的主体?我预见签名就像:
U[] MakeArray<T,U>( /* some lambda magic? */ ) where T : IEntity {}
Run Code Online (Sandbox Code Playgroud)
但我不知道如何指定我期待一个lambda表达式作为方法参数,以及它如何完全转换为方法的主体.
任何人都可以告诉我如何创建MakeArray()上面的功能?我很确定,一旦我看到它是如何完成的,我就可以从那里拿起它.
编辑
正如评论中指出的那样,MakeArray()需要参考一下IEnumerable<>.更新以反映这一点.
关于如何将Json.NET库替换为ASP.NET MVC应用程序中的默认序列化程序有很多资源,但是,就我而言,我找不到一个如何将其设置为默认反序列化器.
为了说明这一点,这里是一些模板代码:
// how to use Json.NET when deserializing
// incoming arguments?
V
public ActionResult SomeAction ( Foo foo ) {
// this piece of code has lots of resources
// on how to override the default Javascript serializer
return Json(new Bar());
}
Run Code Online (Sandbox Code Playgroud)
如何在控制器操作中反序列化传入参数(例如,从jQuery AJAX调用)时,如何告诉我的应用程序使用Json.NET?
$.ajax({
type : 'POST',
data : { foo : 'bar' }
});
Run Code Online (Sandbox Code Playgroud)
我已经尝试MediaTypeFormatters通过从Rick Strahl调整此资源来适应我的代码,但这也不起作用.请注意,我不在WebAPI环境中 - 但我希望一个适用于正常的解决方案Controller应该可以工作(虽然只需要很少的调整)ApiController.
我在Javascript中看到过这样的自调用函数:
(function () {
// foo!
})();
Run Code Online (Sandbox Code Playgroud)
但我也看到他们这样写:
(function () {
// bar!
}());
Run Code Online (Sandbox Code Playgroud)
从语法上讲,它们完全相同.实际上,我的个人习惯是第一种格式,但是我应该注意两者之间有什么区别吗?像浏览器纠结或其他什么?
例如,一个非常微不足道的事情是,如果第二种格式应该可靠地工作,那么这意味着这样的事情也应该是可能的:
function () {
// shut the front door! saved two characters right there!
}();
Run Code Online (Sandbox Code Playgroud)
尽管如此,这会伤害可读性.
我正在尝试使用Type对象创建泛型类的实例.
基本上,我会在运行时拥有不同类型的对象集合,因为无法确定知道它们究竟是什么类型,我想我将不得不使用Reflection.
我正在做类似的事情:
Type elType = Type.GetType(obj);
Type genType = typeof(GenericType<>).MakeGenericType(elType);
object obj = Activator.CreateInstance(genType);
Run Code Online (Sandbox Code Playgroud)
哪个好,好.^ ___ ^
问题是,我想访问我的GenericType <>实例的方法,我不能这样做,因为它被键入为对象类.我找不到将obj强制转换为特定的GenericType <>的方法,因为这首先是问题(也就是说,我不能把它放在像:)这样的东西
((GenericType<elType>)obj).MyMethod();
Run Code Online (Sandbox Code Playgroud)
应该如何处理这个问题?
非常感谢!^ ___ ^
AFAIK,rel="nofollow"链接上的属性指示搜索引擎在抓取您的网站时不要通过链接,因此会切断您网站与链接网站之间关系的所有假设,因此,不会分享您的任何SEO优点.在大多数情况下,这是评论系统上的Good Thing™.
现在,我的网站上集成的IntenseDebate的系统后,我注意到,该评论者的名字通过各自的网站链接没有 nofollow.这种情况在我脑海中引起了警报 - 也就是说,直到我意识到这些是通过AJAX动态生成的.这意味着当搜索蜘蛛爬过我的网站时,这些链接不存在.
问题避免了.好.松了一口气.
但是,有些网站建议实施基于脚本的解决方案来添加nofollow.
现在这与我目前对此的理解并不相符nofollow,原因有两个:
如上所述,当蜘蛛抓取您的页面时,链接不存在.所以它没有意义nofollow,因为就蜘蛛而言,毕竟没有任何东西可循.
关于静态链接,蜘蛛无法运行脚本来添加nofollow标记,因此蜘蛛可以遵循的链接将不会被修改,因此是follow链接.
我在这里错过了什么吗?使用Javascript 动态添加nofollow到链接实际上有用吗?
在Oracle中,您可以使用以下内容创建临时表:
CREATE GLOBAL TEMPORARY TABLE temp_table (
field1 NUMBER,
field2 NUMBER
)
ON COMMIT DELETE ROWS;
Run Code Online (Sandbox Code Playgroud)
...这可能非常漂亮,因为这会创建一个对所有人都可见的表,但只有他或她才能看到INSERT进入表中的数据.此外,该数据会在事务或会话结束时自动删除(取决于其声明),从而使其他人的临时数据不受损害.
但是,在SQL Server中,您可以使用以下命令创建临时表:
CREATE TABLE #temp_table (field1 INT, field2 INT);
Run Code Online (Sandbox Code Playgroud)
......据我所知,它与Oracle的实施在本质上和功能上有所不同.此临时表仅对您可见,并在使用后立即删除(表).
如上所述,SQL Server中是否有任何模仿Oracle行为的能力?或者,使用临时数据的唯一方法是不得不在每次迭代工作时重复创建临时表?
我目前正试图了解一下ASP.NET开发环境的WCF服务,我相信我做得很好,除了让我感到难过的一件事.
基本上,我有一个WCF服务设置(让我们采取默认,添加构造函数):
public class MyService : IMyService
{
public MyService() { /* blah */ }
public DoWork() { /* blah */ }
}
Run Code Online (Sandbox Code Playgroud)
该IMyService接口定义了DoWork()方法作为一个[OperationContract],因为它应该.
所以我通过VS2010用户界面上的添加服务参考,在另一个项目中引用了这个服务(假设是[单元]测试项目).这创建了一个对应该MyServiceClient公开我的WCF服务方法的引用.
但是,当我在我的测试项目中执行此操作时:
ServiceReference.IMyService service;
service = new ServiceReference.MyServiceClient();
Run Code Online (Sandbox Code Playgroud)
... MyService()构造函数没有被调用,主要是因为我实例化了一个MyServiceClient,而不是一个MyService本身.
如何获得调用该构造函数?我打算将其用于初始化目的(例如,在分层实现中抓取一个层?).
这个功能可以对我的链接进行排序,就像Chrome/Safari/Firefox上的魅力一样,但在IE中则不然.有人可以告诉我为什么吗?
症状:一切都消失了(第2行)没有出现任何内容(第3行)
HTML:
Run Code Online (Sandbox Code Playgroud)<div class="genres"> <a title="90 items" href="?genre=absurdism"><span>absurdism</span></a> <a title="83 items" href="?genre=action"><span>action</span></a> <a title="322 items" href="?genre=adult"><span>adult</span></a> <a title="2974 items" href="?genre=adventure"><span>adventure</span></a> <a title="106 items" href="?genre=about+comics"><span>about comics</span></a> </div>
脚本:
sorted = $('.genres a').sort(function(a, b) {
return a.innerHTML > b.innerHTML
});
$('.genres').html('');
sorted.each(function(i, a) {
$('.genres').append(a)
});
Run Code Online (Sandbox Code Playgroud)
小提琴:http://jsfiddle.net/MWkJg/2/
此代码的在线页面位于http://www.lambiek.net/webshop.html(点击"流派"按钮)