问题

最近写 socket程序遇到几个问题一直没有解决  记下  日后继续解决

问题背景:两个程序socket通讯 序列化

View Code
 1  /// <summary>
 2         /// 从对象转化为xml字符串
 3         /// </summary>
 4         /// <param name="obj"></param>
 5         /// <returns></returns>
 6         public static byte[] SerializeXml(object obj)
 7         {
 8             string xml = string.Empty;
 9             XmlSerializer xs = new XmlSerializer(obj.GetType());
10             XmlWriterSettings settings = new XmlWriterSettings()
11             {
12                 Encoding = Encoding.UTF8
13             };
14             MemoryStream stream = new MemoryStream();//如果用StringBuilder,转化出来的xml 编码是UTF16,XmlWriterSettings不起作用,. 只能对Stream进行编码更改。
15             using (XmlWriter writer = XmlWriter.Create(stream, settings))
16             {
17                 xs.Serialize(writer, obj);
18             }
19             return Encoding.UTF8.GetBytes(Encoding.UTF8.GetString(stream.ToArray(), 0,stream.ToArray().Length).Trim());//此处转化为xml字符串后,会有一个编码是65279的小空格,大约只占1个像素.
20         }
21 
22 
23         public static byte[] Serialize(object obj)
24         {
25             DataContractSerializer serializer = new DataContractSerializer(obj.GetType());
26 
27             MemoryStream ms = new MemoryStream();
28 
29             serializer.WriteObject(ms, obj);
30 
31             ms.Seek(0, 0);
32             return ms.ToArray();
33         }
34 
35         public static T Deserialize<T>(byte[] data)
36         {
37             string _serializeString = Encoding.UTF8.GetString(data, 0, data.Length);
38             DataContractSerializer serializer = new DataContractSerializer(typeof(T));
39 
40             MemoryStream ms = new MemoryStream(data);
41             ms.Seek(0, 0);
42             return (T)(serializer.ReadObject(ms));
43         }
44 
45         public static string SerializeToString(object obj)
46         {
47             DataContractSerializer serializer = new DataContractSerializer(obj.GetType());
48 
49             MemoryStream ms = new MemoryStream();
50 
51             serializer.WriteObject(ms, obj);
52 
53             return Encoding.UTF8.GetString(ms.ToArray(), 0, (int)ms.Length);
54         }
55 
56         public static T DeserializeFromString<T>(string data)
57         {
58             byte[] buffer = Encoding.UTF8.GetBytes(data);
59 
60             DataContractSerializer serializer = new DataContractSerializer(typeof(T));
61 
62             MemoryStream ms = new MemoryStream(buffer);
63             ms.Seek(0, 0);
64             return (T)(serializer.ReadObject(ms));
65         }

的obejet to byte的时候和byte to obeject的时候再一个程序里面不报错 

可是移至两个工程的时候   调试截取的数据都一样一到最后一步转换的时候就报 ” 根节点错误在第一行第一列“网上搜了很多办法都没解决 

换了很多方法也没完成 

最后没办法无奈了 

只能先转换成json string  然后再在socket中传送 string   类型 

最后在把jsonstring转换成对象  

也算是不完美的完美

代码:

View Code
1 //序列化   注意此方法 需要引入第三方类库  newtonsoft
2 JsonConvert.SerializeObject( new Class1() { t = "1" })
3 //反序列化  引入命名空间 如果是net3.5以下 需要下载web扩展dll
4 //否则直接引入这个空间就ok  using System.Web.Script.Serialization;
5 JavaScriptSerializer jss = new JavaScriptSerializer();
6                 Class1 t = jss.Deserialize<Class1>(receivedContent);
7                 receivedContent = t.t;

 

posted @ 2012-12-23 21:47  ~星~  阅读(173)  评论(0编辑  收藏  举报