使用 IPWorks nSoftware 的 Json 反序列化 BodyStyle Wrap 问题

Posted

技术标签:

【中文标题】使用 IPWorks nSoftware 的 Json 反序列化 BodyStyle Wrap 问题【英文标题】:Json Deserialization BodyStyle Wrap issue using IPWorks nSoftware 【发布时间】:2012-05-28 15:02:58 【问题描述】:

我正在使用 IPWorks nsoftware 来创建服务。在其中,调用我正在使用的服务

        Rest rest = new Rest();
        rest.Accept = "application/json";
        rest.ContentType = "application/json";
        rest.User = "UserName";
        rest.Password = "Password";
        rest.Get(@"http://Foo.com/roles.json");
        string result = rest.TransferredData;
        var listRoles = JsonSerializer.DeserializeFromString<List<role>>(result);

我将 Json 响应作为字符串获取

["role":"name":"Administrator","created_at":"2012-02-11T09:53:54-02:00","updated_at":"2012-04-29T23:43 :47-04:00","id":1","role":"name":"NormalUser","created_at":"2013-02-11T08:53:54-02:00" ,"updated_at":"2013-04-29T23:43:47-03:00","id":2"]

这里的 json 字符串包含我的域对象“角色”,它被附加到我的响应中(即消息的正文样式被包装)。 我正在使用 ServiceStack.Text 的 Deserializer 将响应字符串转换为我的对象。但是既然是包装的,那么反序列化就不正确了。

这里有什么我想念的吗?是否有任何“BodyStyle”属性可以添加到 Rest 请求中?

【问题讨论】:

【参考方案1】:

GitHubRestTests shows some of the different ways 您可以使用ServiceStack's JSON Serializer 反序列化第 3 方 json API。

如果您想将其反序列化为类型化 POCO,那么根据您的 JSON 有效负载判断,类型化 POCO 应该类似于:

public class RolePermissionWrapper 

    public Role Role  get; set; 
    public Permission Permission  get; set; 


public class Role 
 
    public long Id  get; set;  
    public string Name  get; set;  
    public DateTime? Created_At  get; set;  
    public DateTime? Updated_At  get; set;  
 

var listRoles = JsonSerializer.DeserializeFromString<List<RolePermissionWrapper>>(result);

【讨论】:

以上是关于使用 IPWorks nSoftware 的 Json 反序列化 BodyStyle Wrap 问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Indy http 或 ipworks http 模拟登录?

折扣asp.net 经典asp ipworks

OFX 连接选项

列出 CalDAV 上可供用户使用的日历 (Bedework)

具有非阻塞 tcp 调用的 TThread

列出CalDAV(Bedework)上可供用户使用的日历