反序列化JSON,将特定字段作为JObject或JArray返回

是否有任何标准的方法来处理包含公共字段的JSON响应,而这些字段可以作为Array(JArray)或Object(JObject)返回?

样本: 两个响应均来自同一端点。 如果请求失败,响应1(字段数据=>类型的数组)

{
 "code": "1","message": "Chatterjee","data": [{"test"}],}

如果请求成功,响应2(字段数据=>类型的对象)

{
 "code": "1","data": {
           "name": "test"
  },}

现在我有两种类型用于反序列化。

public abstract class PushHubBaseResult
{
    public PushHuberrorCode Code { get; set; }
    public bool Success { get; set; }
    public string Message { get; set; }
    public abstract object GetData();
}

public class PushHubResult : PushHubBaseResult
{
    public JArray Data { get; set; }

    public override object GetData()
    {
        return Data;
    }
}

public class PushHubResultTransfer : PushHubBaseResult
{
    public JObject Data { get; set; }
    public override object GetData()
    {
        return Data;
    }
}

根据请求成功的情况,我将进行一两个反序列化。

IRestResponse<PushHubResultTransfer> result = client.Deserialize<PushHubResultTransfer>(response);

        if (result.IsSuccessful)
            return result.Data;
        else
        {
            // Try to deserialize failed response
            IRestResponse<PushHubResult> resultFailed = client.Deserialize<PushHubResult>(response);

            if (resultFailed.Data != null)
                return resultFailed.Data;

        }

仅进行一次反灭菌处理如何处理?喜欢:

IRestResponse<TypeX> result = client.Deserialize<TypeX>(response);

        if (result.IsSuccessful)
            return result.Data;
        else
        {
            if (resultFailed.Data != null)
                return resultFailed.Data;
        }

更新:

我切换到“动态”模式,使它可以在单个课程中使用。因为在后端没有任何转换。在这种情况下,它将1:1转发给JS客户端。

 public class PushHubResult
{
    public PushHuberrorCode Code { get; set; }
    public bool Success { get; set; }
    public string Message { get; set; }
    public dynamic Data { get; set; }
}
lvcha108 回答:反序列化JSON,将特定字段作为JObject或JArray返回

您应该使用Newtonsoft.Json

以下代码将为您提供Json的“ oj”数组,然后从该数组中获取所需的参数。

JObject oj = JObject.Parse(Json);
JsonValue message = JsonValue.Parse(oj["message"].ToString());
本文链接:https://www.f2er.com/3103515.html

大家都在问