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