Tod*_*ier 11 c# serialization json json.net asp.net-web-api
在ASP.NET Web API应用程序中,我正在使用的一些模型包含一小块ad-hoc JSON,它仅在客户端有用.在服务器上,它只是作为字符串进出关系数据库.性能是关键,根本不需要处理JSON字符串服务器端.
所以在C#中,想象一个像这样的对象:
new Person
{
FirstName = "John",
LastName = "Smith",
Json = "{ \"Age\": 30 }"
};
Run Code Online (Sandbox Code Playgroud)
默认情况下,Json.NET会像这样序列化这个对象:
{
"FirstName": "John",
"LastName": "Smith",
"Json": "{ \"Age\": 30 }"
}
Run Code Online (Sandbox Code Playgroud)
我希望能够指示Json.NET假设该Json
属性已经是序列化表示,因此它不应该重新序列化,并且生成的JSON应如下所示:
{
"FirstName": "John",
"LastName": "Smith",
"Json": {
"Age": 30
}
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,这适用于两个方向,即在POST JSON表示时,它将自动反序列化为上面的C#表示.
使用Json.NET实现这一目标的最佳机制是什么?我需要定制JsonConverter
吗?是否有一个更简单的基于属性的机制?效率很重要; 重点是跳过序列化开销,这可能是一个微优化,但为了论证,让我们假设它不是.(可能会Json
返回包含大量属性的大列表.)
Mik*_*son 19
如果你能够改变的类型Json
物业Person
从string
到JRaw
那么你会得到期望的结果.
public class Person
{
public string FirstName { get; set;}
public string LastName { get; set;}
public JRaw Json { get; set;}
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以保留该string
属性,并添加一个JRaw
属性以用作序列化的代理:
public class Person
{
public string FirstName { get; set;}
public string LastName { get; set;}
[JsonIgnore]
public string Json { get; set; }
[JsonProperty("Json")]
private JRaw MyJson
{
get { return new JRaw(this.Json); }
set { this.Json = value.ToString(); }
}
}
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,序列化和反序列化都可以按照您的要求运行.
归档时间: |
|
查看次数: |
4150 次 |
最近记录: |