我有一些使用ASP.Net MVC的C#代码,它使用Json.Net来序列化一些DTO.为了减少有效负载,我使用[JsonProperty(PropertyName ="shortName")]属性在序列化期间使用较短的属性名称.
当客户端是另一个.Net应用程序或服务时,这很有效,因为反序列化将对象层次结构放回到一起,使用更长的更友好的名称,同时保持实际传输有效负载低.
当客户端通过浏览器javascript/ajax时,问题就出现了.它发出请求,并获取json ...但是json正在使用缩短的不太友好的名称.
如何让json.net序列化引擎以编程方式忽略[JsonProperty(PropertyName ="shortName")]属性?理想情况下,我的MVC服务将在那里运行,通常使用缩短的属性名称进行序列化.当我的代码检测到特定参数时,我想使用较长的名称序列化数据并忽略[JsonProperty()]属性.
有什么建议?
谢谢,
凯文
在我的项目中,我编写了一个自定义 json 转换器来修剪 string 属性中存在的空格。
这是我们将使用的典型类的示例,
public class Candidate
{
public string CandidateName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是我的自定义 json 转换器
public class StringSanitizingConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(string);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue , JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.String)
if (reader.Value != null)
{
string sanitizedString = (reader.Value as string).Trim();
if (StringSanitizeOptions.HasFlag(StringSanitizeOptions.ToLowerCase))
sanitizedString = sanitizedString.ToLowerInvariant();
return sanitizedString;
}
return reader.Value;
}
public override void …Run Code Online (Sandbox Code Playgroud)