• 问题


    最近写 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;
  • 相关阅读:
    Flutter 导航栏上添加搜索按钮
    tabController保活
    nav 选项卡
    flutter 毛玻璃
    [题解]CodeForces878 D
    [题解]CodeForces878C Tournament
    [题解]NOIP2012
    bzoj1070题解
    bzoj1061题解
    bzoj1059题解
  • 原文地址:https://www.cnblogs.com/cxing/p/2830322.html
Copyright © 2020-2023  润新知