java 序列化报错求解

小弟最近改造用户登陆模块,因为涉及到集群的部署,所以session中的对象都要是可序列化的,然后其中有一段特别不解,而且一直报错:代码如下:

List menuList = (List) JSONArray.toList(JSONArray.fromObject(menuJson),HashMap.class)


其中menuJson为json字符串,单元测试代码:如下


    ObjectOutputStream objectOutputStream2 = new ObjectOutputStream(
                 new FileOutputStream(new File("D:\\testFile1.txt")));  
         objectOutputStream2.writeObject(menuList);
         objectOutputStream2.flush();
         objectOutputStream2.close();
         ObjectInputStream objectInputStream2 = new ObjectInputStream(
                 new FileInputStream(new File("D:\\testFile1.txt")));
         List sn2 = (List) objectInputStream2.readObject();    
         
         objectOutputStream2.close();
         System.out.println("sn2------------------------------------"+sn2.size());

报错如下:

java.io.NotSerializableException: net.sf.json.JSONObject
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1164)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330)
    at java.util.HashMap.writeObject(HashMap.java:1001)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:940)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1469)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330)
    at java.util.ArrayList.writeObject(ArrayList.java:570)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)


求解啊



  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,能否告诉我您遇到的具体报错信息是什么呢?在不知道具体报错信息的情况下,我可以给您提供一些常见的问题和解决方法。 1. Hashtable 中的值类型不支持序列化 如果 Hashtable 中的值类型是自定义类型,而且没有实现序列化接口,那么在序列化时会报错。解决方法是实现序列化接口,比如在自定义类型中添加以下代码: ```csharp [Serializable] public class CustomType : ISerializable { // 类的其他代码 public void GetObjectData(SerializationInfo info, StreamingContext context) { // 实现序列化接口 } } ``` 2. 不能序列化 Hashtable .NET 框架中的 Hashtable 类是不支持序列化的,因为它没有标记为可序列化的。如果您尝试对 Hashtable 进行序列化,将会抛出 SerializationException 异常。解决方法是将 Hashtable 转换为支持序列化的类型,比如 Dictionary。 ```csharp Hashtable hashtable = new Hashtable(); // 在 hashtable 中添加一些键值对 Dictionary<string, object> dictionary = new Dictionary<string, object>(); foreach (DictionaryEntry entry in hashtable) { dictionary.Add((string)entry.Key, entry.Value); } BinaryFormatter formatter = new BinaryFormatter(); using (Stream stream = new FileStream("hashtable.bin", FileMode.Create, FileAccess.Write, FileShare.None)) { formatter.Serialize(stream, dictionary); } ``` 3. 序列化时文件被占用 如果在序列化时文件被占用,将会抛出 IOException 异常。解决方法是在打开文件时指定 FileShare.None,这样可以确保其他进程不能访问文件。 ```csharp using (Stream stream = new FileStream("hashtable.bin", FileMode.Create, FileAccess.Write, FileShare.None)) { formatter.Serialize(stream, hashtable); } ``` 希望以上方法能够帮助您解决问题。如果还有其他问题,请随时提出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值