mat*_*mat 5 c# json servicestack
我有以下DTO:
public class MyDTO
{
public int Id { get; set; }
public String Info { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
的信息元素包含一些序列化JSON对象其可以具有多种不同的类型。在我的服务功能中,我使用return x.ConvertTo<MyDTO>()
我的问题是,是,由于ServiceStack是不知道的信息持有JSON,特殊字符(引号)信息被转义。
所以我得到
{"Id":15,"Info":"[\"Test1\",\"Test2\",\"Test3\"]"}
Run Code Online (Sandbox Code Playgroud)
从服务中获取,但实际上我想得到的是
{"Id":15,"Info":["Test1","Test2","Test3"]}
Run Code Online (Sandbox Code Playgroud)
是否可以通过某种方法告诉ServiceStack Info保留JSON数据,从而防止其转义字符串,而是将JSON值直接插入响应中?
PS:我的问题不是该问题的重复,该问题与将服务的默认DTO编码强制为JSON有关,而我的问题涉及某些类型的JSON编码如何发生。
使用组合你可以解释Info的属性MyDTO
public class MyDTO<T> : MyDTO {
public MyDTO(MyDTO dto) {
this.Id = dto.Id;
this.Info = JsonConvert.DeserializeObject<T>(dto.Info);
}
public new T Info { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这样,Info 中的 JSON 值可以在返回进行序列化之前对其进行规范化。
例如
var dto = x.ConvertTo<MyDTO>();
return new MyDTO<dynamic>(dto);
Run Code Online (Sandbox Code Playgroud)
如果dto.Info是 JSON 字符串数组,则允许在 OP 中根据需要序列化该数组
var dto = new MyDTO {
Id = 15,
Info = "[\"Test1\",\"Test2\",\"Test3\"]"
}
Run Code Online (Sandbox Code Playgroud)
会产生
{"Id":15,"Info":"[\"Test1\",\"Test2\",\"Test3\"]"}
Run Code Online (Sandbox Code Playgroud)
然而
new MyDTO<dynamic>(dto);
Run Code Online (Sandbox Code Playgroud)
会产生
{"Id":15,"Info":["Test1","Test2","Test3"]}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
575 次 |
| 最近记录: |