【问题标题】:Newtonsoft JSON Deserialize InterfaceNewtonsoft JSON 反序列化接口
【发布时间】:2017-11-14 16:14:11
【问题描述】:

我在反序列化以下示例 JSON sn-p 时遇到问题:

{
   "list":{
       "A":{"ClassA":{"PropertyA":"test"}},
       "B":{"ClassB":{"PropertyB":"test"}}
    }
}

我的 A 类:

public class ClassA:IInterface{
   public String PropertyA{get; set;}
}
public class ClassB:IInterface{
   public String PropertyB{get; set;}
}

我希望 JsonConverter 使用 JSON 中的 PropertyA 或 PropertyB 创建 ClassA 或 ClassB。 ClassA 或 ClassB 嵌入在字典中。

我也可以将完整的类名和命名空间放在那里,但我真的无法让它工作。

提前感谢您的帮助

【问题讨论】:

标签: c# json interface


【解决方案1】:

你需要一个包装类:

public class ListClass
{
    public WrapperList List { get; set; }
}

public class WrapperList
{
    public WrapperA A { get; set; }
    public WrapperB B { get; set; }
}

public class WrapperA
{
    public ClassA ClassA { get; set; }
}

public class WrapperB
{
    public ClassB ClassB { get; set; }
}

public class ClassA : IInterface
{
    public String PropertyA { get; set; }
}

public class ClassB : IInterface
{
    public String PropertyB { get; set; }
}

然后:

var list = JsonConvert.DeserializeObject<ListClass>(json);

【讨论】:

  • 我想避免那些包装类。不过谢谢你的帮助
  • 你不能,包装器反映了你提供的 json。如果您可以更改 json,那么您应该能够摆脱包装器。理想的 json 应该是: { "ClassA": { "PropertyA": "test" }, "ClassB": { "PropertyB": "test" } }
猜你喜欢
  • 2013-06-06
  • 1970-01-01
  • 2019-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多