我需要将一些对象序列化/反序列化为字符串,并将它们作为不透明的数据传输.我可以使用XmlSerializer来完成它,但生成的字符串看起来很笨拙.那么,.NET中是否有任何简洁的Serializer?
我想到的第一件事就是.NET可能有JSON Serializer,但我找不到它.在.NET中是否有任何现成的方法将对象转换为简洁的字符串?
使用ASP.NET MVC,通常有AJAX代码(例如jQuery)从服务器调用Web服务而不刷新页面.使Web服务RESTful是很自然的.似乎有两种方法可以去.首先,ASP.NET MVC URI是RESTful,很容易使一些Controller/Action充当Web服务方法.其次,从版本3.5开始,WCF可以是RESTful.
那么,这两种方式的利弊是什么?
对ASP.NET MVC的请求将通过ASP.NET管道.这会使它比WCF慢吗?
有时,服务器端将生成要嵌入内联JavaScript代码的字符串.例如,如果"UserName"应由ASP.NET生成.然后看起来像.
<script>
var username = "<%UserName%>";
</script>
Run Code Online (Sandbox Code Playgroud)
这不安全,因为用户可以拥有他/她的名字
</script><script>alert('bug')</script></script>
这是XSS漏洞.
所以,基本上,代码应该是:
<script>
var username = "<% JavascriptEncode(UserName)%>";
</script>
Run Code Online (Sandbox Code Playgroud)
什么JavascriptEncode确实是增加系统字符"\"前"/"和"""和""."所以,输出HTML是什么样子.VAR用户名="</ SCRIPT>警报(\ '错误\')</ SCRIPT > </ SCRIPT>";
浏览器不会将" </ script> " 解释为脚本块的结尾.所以,XSS避免了.
但是,那里仍然有"<"和">".建议也要逃避这两个字符.首先,我认为将"<"改为"<"并不是一个好主意.和">"到">" 这里.并且,我不确定将"<"更改为"\ <"并且">"更改为"\>"可以被所有浏览器识别.似乎没有必要对"<"和">"进行进一步编码.
对此有什么建议吗?
谢谢.
今天我碰巧发现一个C#类可以以隐式和显式方式继承一个接口.这让我感到惊讶.如果C#以这种方式工作,那么当以不同方式引用时,一个实例的行为会有所不同.
interface IFoo
{
void DoSomething();
}
class Foo : IFoo
{
#region IFoo Members
public void DoSomething()
{
Console.WriteLine("do something implicitly");
}
#endregion
#region IFoo Members
void IFoo.DoSomething()
{
Console.WriteLine("do something explicitly");
}
#endregion
}
Foo f = new Foo();
f.DoSomething();
((IFoo)f).DoSomething();
Run Code Online (Sandbox Code Playgroud)
上面的代码运行和输出
do something implicitly
do something explicitly
Run Code Online (Sandbox Code Playgroud)
我相信这种C#设计会使行为不一致.也许强制一个C#类可以以隐式或expliict方式从一个接口继承,但不能同时从两个接口继承.
有没有理由为什么C#以这种方式设计?
在C#中,如果我想序列化一个实例XmlSerializer,那么对象的类型不必用[Serializable]属性标记.但是,对于其他序列化方法,例如DataContractSerializer,需要将类标记为[Serializable]或[DataContract].
是否有关于序列化要求的标准或模式?
根据http://www.webmonkey.com/2010/02/browser-specific_css_hacks/,我碰巧在WebKit浏览器中使用了下面的CSS hack .
@media screen and (-webkit-min-device-pixel-ratio:0) {
#my-id { height: 100%; }
}
Run Code Online (Sandbox Code Playgroud)
有用.但是,后来我发现它在生产环境中不起作用.我发现它是由于CSS优化器修剪后的空间and.Chrome无法识别以下CSS.
@media screen and(-webkit-min-device-pixel-ratio:0) {
#my-id { height: 100%; }
}
Run Code Online (Sandbox Code Playgroud)
那么,究竟是什么@media screen and (-webkit-min-device-pixel-ratio:0)意思呢?
我知道@media screen,但我之前没有and在CSS文件中使用过.
为什么and必要后的空间角色?
我正在学习函数式编程风格.在" 不要害怕Monads"中,Brian Beckman对Monad进行了精彩的介绍.他提到Monad是关于功能的组合,以解决复杂性.
Monad包括
unit将类型T转换为放大类型M(T)的函数; 和一个Bind函数,给定从T到M(U)的函数,将类型M(T)转换为另一种类型M(U).(U可以是T,但不一定是).
根据我的理解,实现monad的语言应该静态地进行类型检查.否则,在编译期间无法找到类型错误,并且不控制"复杂性".我的理解是否正确?
我看到了很多"功能!"的用法.在其他vimrc文件中,但没有易于查找的"功能!"文档.
"功能"和"功能"之间有什么区别?
我读了一些像这样的 AJAX-Form教程.标记表单用于HTML代码.但是,我认为没有必要.既然我们是通过发送HTTP请求的XmlHttpRequest,发送的数据可以是任何东西,没有必要投入的形式.
那么,有没有理由在HTML中为AJAX应用程序提供表单标记?
我刚刚遇到一个代码设计问题.说,我有一个"模板"方法,可以调用一些可能"改变"的函数.直观的设计是遵循"模板设计模式".将更改函数定义为要在子类中重写的"虚拟"函数.或者,我可以使用没有"虚拟"的委托功能.注入委托函数,以便它们也可以自定义.
最初,我认为第二种"委托"方式比"虚拟"方式更快,但是一些编码片段证明它不正确.
在下面的代码中,第一个DoSomething方法遵循"模板模式".它调用虚方法IsTokenChar.第二个DoSomthing方法不依赖于虚函数.相反,它有一个传入代理.在我的电脑中,第一个DoSomthing总是比第二个快.结果如1645:1780.
"虚拟调用"是动态绑定,应该比直接委托调用更耗时,对吗?但结果表明事实并非如此.
有人可以解释一下吗?
using System;
using System.Diagnostics;
class Foo
{
public virtual bool IsTokenChar(string word)
{
return String.IsNullOrEmpty(word);
}
// this is a template method
public int DoSomething(string word)
{
int trueCount = 0;
for (int i = 0; i < repeat; ++i)
{
if (IsTokenChar(word))
{
++trueCount;
}
}
return trueCount;
}
public int DoSomething(Predicate<string> predicator, string word)
{
int trueCount = 0;
for (int i = 0; i < repeat; ++i)
{
if (predicator(word))
{
++trueCount; …Run Code Online (Sandbox Code Playgroud)