在.NET世界中,当谈到对象序列化时,它通常用于在运行时检查对象的字段和属性.对此作业使用反射通常很慢,并且在处理大量对象时是不合需要的.另一种方法是使用IL发射或构建表达树,这些表现树相对于反射提供显着的性能增益.而后者是处理序列化时最现代化的库.但是,在运行时构建和发送IL需要花费时间,并且只有在将此信息缓存并重用于相同类型的对象时才会回收投资.
当使用Json.NET时,我不清楚使用上述哪种方法,如果确实使用了后者,是否使用了缓存.
例如,当我这样做时:
JsonConvert.SerializeObject(new Foo { value = 1 });
Run Code Online (Sandbox Code Playgroud)
Json.NET是否构建了Foo的成员访问信息并缓存以便以后重用它?
我有一个接受的控制器
public class MyModel
{
[MaxLength(400)]
public string Message { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有一个WebApi Post Action
public HttpResponseMessage Post(MyModel viewModel)
{
if (!ModelState.IsValid)
return new HttpResponseMessage(HttpStatusCode.BadRequest);
...
}
Run Code Online (Sandbox Code Playgroud)
并采取行动.
由于内容是通过javascript写出的,而不是直接在视图中写出来的,确切的内容都被写出来了,也没有关于危险内容的asp.net警告.
我想要防范XSS.目前我在做
HttpUtility.HtmlEncode(Regex.Replace(p.Message, @"<[^>]*>", String.Empty))
Run Code Online (Sandbox Code Playgroud)
在Get动作中.(从使用C#正则表达式删除HTML标记中获取一些代码)
我应该使用Asp.Net内置的保护措施吗?我可以用我的模型装饰任何属性吗?
我注意到了http://stephenwalther.com/archive/2012/06/25/announcing-the-june-2012-release-of-the-ajax-control-toolkit.aspx,但点击了http:// wpl. codeplex.com/似乎非常糟糕.
我在我的Web API项目中使用以下内容Startup.cs将JSON序列化枚举为字符串:
// Configure JSON Serialization
var jsonSerializationSettings = GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings;
jsonSerializationSettings.Formatting = Newtonsoft.Json.Formatting.None;
jsonSerializationSettings.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter());
Run Code Online (Sandbox Code Playgroud)
这是为了避免装饰每个Enum属性 [JsonConverter(typeof(StringEnumConverter))]
现在,如何选择退出某些Enum属性的全局序列化设置并使用转换为整数的默认序列化程序?
我正在使用一个 API,它以与我习惯处理不同的方式返回结果,而且看起来不标准。
例如,以下是客户数据的片段:
{
"CustomerID": {
"value": "EXAMPLE"
},
"CustomerCurrencyID": {
"value": "USD"
}
}
Run Code Online (Sandbox Code Playgroud)
这个“value”属性似乎非常不必要,所以我想看看我是否可以绕过所有这些并将该 JSON 反序列化为一个对象,如下所示:
class Customer {
public string CustomerID { get; set; }
public string CustomerCurrencyID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我目前正在编写一个自定义 JsonConverter 来处理这个问题,所以如果我走的是正确的道路,请告诉我,但这里的任何提示/技巧将不胜感激!