如何在Java中将对象强制转换为字段类型?
大家好,提前谢谢大家。 我使用Java中的反射来获取所有类字段,并用反序列化JSON消息中的值填充它们。但我总是会犯这样的错误如何在Java中将对象强制转换为字段类型?,java,c#,json,casting,Java,C#,Json,Casting,大家好,提前谢谢大家。 我使用Java中的反射来获取所有类字段,并用反序列化JSON消息中的值填充它们。但我总是会犯这样的错误 Exception in thread "Thread-2" java.lang.IllegalArgumentException: Can not set short field Message.Error to java.lang.String 下面是它发生的片段: public static Message Decode(String request)
Exception in thread "Thread-2" java.lang.IllegalArgumentException:
Can not set short field Message.Error to java.lang.String
下面是它发生的片段:
public static Message Decode(String request) {
JSONObject obj = new JSONObject(request);
Message msg = new Message();
for (Field fld :msg.getClass().getDeclaredFields())
if (obj.has(fld.getName())) {
try {
msg.getClass().getField(fld.getName()).set(msg, obj.get(fld.getName()));
} catch (IllegalAccessException e) {
return null;
} catch (NoSuchFieldException e) {
return null;
}
}
return msg;
}
在这里,我还没有使用任何强制转换,因为我还没有找到任何关于强制转换到动态类型的有用信息。也许有人也有同样的问题
如果有人知道C#的相同解决方案,我也会为此而感激。我的客户是以C#为基础的。看起来您正在尝试重新创建类似于library的东西,它允许我们
Message msg = gson.fromJson(request, Message.class);
演示:
结果:
Message[length=10,text=foo bar,whatever=null]
您是否试图重新创建Message msg=gson.fromJson(request,Message.class)
?可能是msg.getClass().getField(fld.getName()).set(msg,obj.get(fld.getName())中的问题;这一行,仔细检查一下这一行。请不要去掉压痕。这有助于更好地查看方法/变量的范围。KishoreReddy,不,这一行工作正常。我查过了。你能把整个堆栈跟踪都贴出来吗?在哪一行抛出此异常?谢谢。工作完美。
class Message{
private short length;
private String text;
private String whatever;
@Override
public String toString() {
return "Message [length=" + length + ", text=" + text + ", whatever=" + whatever
+ "]";
}
}
public class Demo {
public static void main(String[] args) {
String request = "{'length':10, 'text':'foo bar'}";
Gson gson = new Gson();
Message msg = gson.fromJson(request, Message.class);
System.out.println(msg);
}
}