我理解JSON,但不了解JSONP.维基百科关于JSON的文档是JSONP的最佳搜索结果.它说:
JSONP或"带填充的JSON"是JSON扩展,其中前缀被指定为调用本身的输入参数.
咦?什么电话?这对我没有任何意义.JSON是一种数据格式.没有电话.
JSONP是脚本标记注入,将响应从服务器传递到用户指定的函数.
我可以理解这一点,但它仍然没有任何意义.
那么什么是JSONP?它为什么被创建(它解决了什么问题)?为什么我会用它?
附录:我刚刚在维基百科上为JSONP创建了一个新页面 ; 根据jvenema的回答,它现在对JSONP进行了清晰而全面的描述.
在哪种情况下哪一个更受青睐?
我想看看各种模式的评估crtieria列表,也许可以讨论每个标准的适用性.
例如,我认为其中一个标准是加密和解密的"代码大小",这对于微代码嵌入式系统(如802.11网络适配器)非常重要.如果实现CBC所需的代码远小于CTR所需的代码(我不知道这是真的,这只是一个例子),那么我就能理解为什么使用较小代码的模式会更受欢迎.但是,如果我正在编写一个在服务器上运行的应用程序,并且我使用的AES库无论如何都实现了CBC和CTR,那么这个标准就无关紧要了.
请参阅"每个标准的评估标准和适用性列表"的含义?
这与编程无关,但与算法有关.
这篇知识库文章说,ASP.NET Response.End()
中止了一个帖子.
反射器显示它看起来像这样:
public void End()
{
if (this._context.IsInCancellablePeriod)
{
InternalSecurityPermissions.ControlThread.Assert();
Thread.CurrentThread.Abort(new HttpApplication.CancelModuleException(false));
}
else if (!this._flushing)
{
this.Flush();
this._ended = true;
if (this._context.ApplicationInstance != null)
{
this._context.ApplicationInstance.CompleteRequest();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎很苛刻.正如知识库文章所说,以下应用程序中的任何代码Response.End()
都不会被执行,这违反了最不惊讶的原则.它几乎就像Application.Exit()
在WinForms应用程序中.造成线程终止异常Response.End()
不开捕,所以代码周围的try
...... finally
不会满足.
这让我想知道我是否应该总是避免Response.End()
.
任何人都可以建议,我什么时候应该使用Response.End()
,何时Response.Close()
何地HttpContext.Current.ApplicationInstance.CompleteRequest()
?
参考:Rick Strahl的博客文章.
根据我收到的输入,我的回答是,是的,Response.End
是有害的,但在某些有限的情况下它是有用的.
Response.End()
作为一个不可捕获抛出,立即终止HttpResponse
在特殊的条件.在调试过程中也很有用. 避免Response.End()
完成常规反应.Response.Close()
立即关闭与客户端的连接.根据此MSDN博客文章,此方法不适用于正常的HTTP请求处理. 你不太可能有充分的理由来调用这种方法.我正在编写代码来进行Xml序列化.具有以下功能.
public static string SerializeToXml(object obj)
{
XmlSerializer serializer = new XmlSerializer(obj.GetType());
using (StringWriter writer = new StringWriter())
{
serializer.Serialize(writer, obj);
return writer.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
如果参数是没有无参数构造函数的类的实例,它将抛出异常.
未处理的异常:System.InvalidOperationException:CSharpConsole.Foo无法序列化,因为它没有无参数构造函数.System.Xml.Serialization.ModelScope.GetTypeModel的System.Xml.Serialization.TypeScope.GetTypeDesc(Type type,MemberInfo sourc e,Boolean directReference,Boolean throwOnError)中的System.Xml.Serialization.TypeDesc.CheckSupported()处于类型类型, System.Xml.Serialization上的System.Xml.Serialization.XmlSerializer..ctor(Type type,String defaultName space)中System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(Type type,XmlRootAttribute root,String defaultNamespace)的布尔直接引用. XmlSerializer..ctor(类型类型)
为什么必须有一个无参数构造函数才能使xml序列化成功?
编辑:感谢cfeduke的回答.无参数构造函数可以是私有的或内部的.
我很确定这不是重复的,所以请耐心等待一分钟.
如何在不使用任何第三方库的情况下以编程方式(C#)压缩文件(在Windows中)?我需要一个原生的Windows调用或类似的东西; 我真的不喜欢开始一个过程的想法,但如果我绝对不得不这样做.PInovke呼叫会好得多.
如果做不到这一点,让我告诉你我真正想要实现的目标:我需要能够让用户在一个请求中下载一组文档.有关如何实现这一目标的任何想法?
在调试使用AJAX的jQuery应用程序时,我经常需要查看服务返回给浏览器的json.所以我将把JSON数据的URL丢弃到地址栏中.
这对ASPNET很好,因为在编码错误的情况下,我可以在浏览器中看到ASPNET诊断:
但是当服务器端代码正常工作并实际返回JSON时,IE会提示我下载它,所以我看不到响应.
我可以让IE不这样做,换句话说,只是将它显示为纯文本?
我知道如果我将Content-Type标头设置为,我可以这样做text/plain
.
但这特别是ASPNET MVC应用程序的上下文,当我在我的一个动作方法上使用JsonResult时,它自动设置响应.另外,我有点想保留适当的内容类型,而不是仅仅为了支持调试工作而改变它.
我在这里错过了什么吗?
var someNumber = 123.456;
someNumber = someNumber.toFixed(2);
alert(typeof(someNumber));
//alerts string
Run Code Online (Sandbox Code Playgroud)
为什么不.toFixed()
返回一个字符串?
我想将数字四舍五入到2位小数.
我正在为emacs中的C#完成(intellisense)工具.
这个想法是,如果用户键入片段,然后通过特定的击键组合要求完成,则完成工具将使用.NET反射来确定可能的完成.
这样做需要知道正在完成的事物的类型.如果它是一个字符串,那么有一组已知的可能方法和属性; 如果它是一个Int32,它有一个单独的集,依此类推.
使用语义,emacs中提供的代码词法分析器/解析器包,我可以找到变量声明及其类型.鉴于此,可以直接使用反射来获取类型上的方法和属性,然后向用户显示选项列表.(好吧,在 emacs中做的不是那么简单,但是使用在 emacs 中运行PowerShell进程的能力,它变得容易得多.我编写了一个自定义.NET程序集来进行反射,将其加载到powershell中,然后在内部运行elisp emacs可以通过comint向powershell发送命令并读取响应.因此,emacs可以快速获得反射结果.)
当代码var
在声明正在完成的事物中使用时,问题就会到来.这意味着未明确指定类型,并且完成将不起作用.
当使用var
关键字声明变量时,如何可靠地确定实际使用的类型?为了清楚起见,我不需要在运行时确定它.我想在"设计时"确定它.
到目前为止,我有这些想法:
我知道怎么做这一切.但对于编辑器中的每个完成请求,它听起来非常重量级.
我想我每次都不需要新的AppDomain.我可以为单个AppDomain重复使用多个临时程序集,并在多个完成请求中分摊设置和拆除它的成本.这更像是对基本理念的调整.
只需将声明编译到模块中,然后检查IL,以确定编译器推断出的实际类型.这怎么可能?我会用什么来检查IL?
还有更好的想法吗?评论?建议?
编辑 - 进一步考虑这一点,编译和调用是不可接受的,因为调用可能有副作用.因此必须排除第一种选择.
此外,我认为我不能假设.NET 4.0的存在.
更新 - 上面没有提到的正确答案,但Eric Lippert温和地指出,是实现完全保真的类型推理系统.它是在设计时可靠地确定var类型的唯一方法.但是,这也不容易.因为我苦于没有幻想,我要试图建立这样的事情,我把选项2的快捷方式-提取相关声明代码,并编译它,然后检查所产生的IL.
这实际上适用于完成方案的公平子集.
例如,假设在下面的代码片段中,?是用户要求完成的位置.这有效:
var x = "hello there";
x.?
Run Code Online (Sandbox Code Playgroud)
完成意识到x是一个String,并提供适当的选项.它通过生成并编译以下源代码来实现:
namespace N1 {
static class dmriiann5he { // randomly-generated class name
static void M1 () {
var x = "hello there";
}
}
}
Run Code Online (Sandbox Code Playgroud)
......然后用简单的反射检查IL.
这也有效:
var x …
Run Code Online (Sandbox Code Playgroud) 有没有办法让我在.NET中序列化一个对象,而XML Namespaces也不会自动序列化?似乎默认情况下.NET认为应该包含XSI和XSD名称空间,但我不希望它们存在.
.net ×3
c# ×3
javascript ×3
aes ×2
encryption ×2
ajax ×1
appdomain ×1
asp.net ×1
asp.net-ajax ×1
asp.net-mvc ×1
compression ×1
download ×1
jquery ×1
json ×1
jsonp ×1
reflection ×1
rounding ×1
terminology ×1
types ×1
zip ×1