Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中将对象强制转换为字段类型?_Java_C#_Json_Casting - Fatal编程技术网

如何在Java中将对象强制转换为字段类型?

如何在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)

大家好,提前谢谢大家。 我使用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) {
    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);
    }
}