Socket  中我想序列化List<object>,该如何实现?
object为实体类,实体类中有Image/byte[]类型的字段,该如何序列化?
每次都会遇到在“分析完成之前就遇到流结尾。”或者“二进制流“0”不包含有效的BinaryHeader。”这样的错误,请问大蟹们该如何解决该问题?
还有一个问题就是在网络卡的情况下得到的数据包和发送的不一致,该如何解决?
望高手帮忙!困惑了两天了,来回测试都得不到结果,谢谢各位!!!

解决方案 »

  1.   

    object实体类的属性是怎么声明的
    这样的太笼统了,无法入手啊。
      

  2.   


    [Serializable]
    public class ChatMessage
    {
    /// <summary>
    /// ID
    /// </summary>
    public string ID { get; set; } /// <summary>
    /// Sender
    /// </summary>
    public int Sender { get; set; } /// <summary>
    /// Receiver
    /// </summary>
    public int Receiver { get; set; } /// <summary>
    /// Message
    /// </summary>
    public byte[] Message { get; set; } /// <summary>
    /// Datatime
    /// </summary>
    public DateTime Datatime { get; set; } /// <summary>
    /// Flag
    /// </summary>
    public int Flag { get; set; }
    }
    此处Message 内容是RichTextBox富文本内容
      

  3.   

    如果RichTextBox里面单纯是文字没问题,如果插入图片就会遇到问题
      

  4.   

    socket要避免使用序列化。最好使用struct。
    2 搜一下粘包就知道了。
      

  5.   

    Image 是不支持序列化。但我觉得你都保存成Byte[]就可以了。或者自己实现 ISerializable, 但还是建议你直接定义Byte[]
    [Serializable]
    public class TestClass : ISerializable 
    {
        public string Name { get; set; }
        public byte[] Data { get; set; }
        public Image Image { get; set; }    public TestClass()
        { }    public TestClass(SerializationInfo info, StreamingContext context)
        {
            Name = info.GetString("Name");
            Data = (byte[])info.GetValue("Data", typeof(byte[]));
            using (var ms = new MemoryStream(Data))
                Image = Image.FromStream(ms);
        }    [SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter= true)]
        public void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            info.AddValue("Name", Name);
            info.AddValue("Data", Data);
            info.AddValue("Image", Image);
        }
    }//使用:
    var test = new TestClass { Name = "test", Data = File.ReadAllBytes(@"D:\Test\1.jpg"), Image = Image.FromFile(@"D:\Test\1.jpg") };var bf = new BinaryFormatter();
    var ms = new MemoryStream();
    bf.Serialize(ms, test);ms.Position = 0;
    var test1 = bf.Deserialize(ms) as TestClass;
      

  6.   

    第一,你可以采用二进制序列化,二进制是可以序列化List《》的第二,可以采用给数据添加头信息的方式,或多一些两端的信息询问来解决粘包的问题
      

  7.   

    http://www.cnblogs.com/wzd24/archive/2007/06/13/782833.html
    http://www.cnblogs.com/wzd24/archive/2007/12/24/1011932.html
    看了这位两篇文章,明白了一些,不过
    Analyzer(info, buffer);//这个函数用来处理接收到的信息。
    这里不晓得对方如何处理的?
    恳请知晓的人帮忙解答一下,谢谢!