XmlRpc.net 出参字符串还原为结构体

上一篇随笔写的是入参结构体转字符串,现在需要把保存到服务器的字符串还原为结构体,这里记录一下操作步骤:

1. 格式化字符串。

XmlRpcDeserializer 支持反序列化<struct>…</struct>节点开始的数据,所以需要先把字符串首尾其他字符去掉。

   1:  // args 为结构体的字符串
   2:  TaskArgsStruct argStruct = null;
   3:  const string startValue = "<struct>";
   4:  const string endValue = "</struct>";
   5:  int startIndex = args.IndexOf(startValue);
   6:  if (startIndex > 0)
   7:  {
   8:      args = args.Remove(0, startIndex);
   9:  }
  10:  else
  11:  {
  12:      return argStruct;
  13:  }
  14:  int endIndex = args.LastIndexOf(endValue);
  15:  if (endIndex > 0)
  16:  {
  17:      args = args.Remove(endIndex + endValue.Length);
  18:  }
  19:  else
  20:  {
  21:      return argStruct;
  22:  }
 
2. 反序列化字符串。
   1:  XmlRpcDeserializer deSerial = new XmlRpcDeserializer();
   2:  using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(args)))
   3:  {
   4:      XmlReader rdr = XmlReader.Create(ms);
   5:      argStruct = (TaskArgsStruct)deSerial.ParseValueElement(rdr, typeof(TaskArgsStruct), new MappingStack("struct"), MappingAction.Error);
   6:      ms.Close();
   7:  }
   8:   
   9:  return argStruct;

TaskArgsStruct 是接收出参的结构体。到此就得到了TaskArgsStruct 的实例 argStruct 。

原文地址:https://www.cnblogs.com/dipwater/p/3151960.html