我正在进行WebAPI调用以获得类似于此对象的对象:
import javax.swing.*;
import java.awt.*;
public class MyDrawPanel extends JPanel {
private static final int WIDE = 300;
private static final int HIGH = 200;
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.orange);
g.fillRect(20, 50, 100, 100);
}
public MyDrawPanel() {
setBackground(Color.white);
// Set a initial size for the program window
this.setPreferredSize(new Dimension(WIDE, HIGH));
}
private void display() {
// Some statements to let the JFrame appear in a good way
JFrame f = new JFrame("MyDrawPanel");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(this);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
// Main method is called when the program is runned
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new MyDrawPanel().display();
}
});
}
}
正确填充ID和其他属性。 SubCategories prop具有正确大小的集合,但每个条目都为null。
知道为什么吗?我不能把它变成一个具体类型的集合(在我的控制之外),但是WebAPI能够找出它应该是哪个类......
答案 0 :(得分:1)
此答案假设您使用的是JSON.net,这是ASP.NET WebAPI的默认设置。由于JSON.net不了解如何创建IDocumentCategoryTree
的具体实例,因此无法为您自动反序列化。所以你需要自己这样做,我这样做的方式就是为你的班级使用JsonConverter:
public class DocumentCategoryModel : IDocumentCategoryTree
{
public DocumentCategoryModel()
{
SubCategories = new List<IDocumentCategoryTree>();
}
public int ID { get; set; }
[JsonConverter(typeof(DocumentCategoryTreeConverter)]
public ICollection<IDocumentCategoryTree> SubCategories { get; set; }
}
public class DocumentCategoryTreeConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
// Todo if desired
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
return serializer.Deserialize<TestTree>(reader);
}
public override bool CanConvert(Type objectType)
{
// Todo
}
}
这是一个非常简单且不完整的示例,可让您了解如何执行此操作并开始使用。您可以在此处的其他一些SO帖子中详细了解JsonConverter
:How to implement custom JsonConverter in JSON.NET to deserialize a List of base class objects?。
答案 1 :(得分:0)
XML和JSON序列化/反序列化应该在具体类中进行。如果它没有具体,它就不会知道如何正确地序列化它。我建议为DocumentCatTreeApiModel
创建一个具体的内容,例如"/cat/noeud/key"
。这将使序列化过程正常工作。