Free cookie consent management tool by TermsFeed Policy Generator

source: stable/HeuristicLab.Clients.Hive/3.3/Util/PersistenceUtil.cs @ 17147

Last change on this file since 17147 was 17105, checked in by mkommend, 5 years ago

#2520: Merged 16584, 16585,16594,16595, 16625, 16658, 16659, 16672, 16707, 16729, 16792, 16796, 16797, 16799, 16819, 16906, 16907, 16908, 16933, 16945, 16992, 16994, 16995, 16996, 16997, 17014, 17015, 17017, 17020, 17021, 17022, 17023, 17024, 17029, 17086, 17087, 17088, 17089 into stable.

File size: 2.1 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
4 *
5 * This file is part of HeuristicLab.
6 *
7 * HeuristicLab is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * HeuristicLab is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
19 */
20#endregion
21
22using System;
23using System.Collections.Generic;
24using System.IO;
25using HEAL.Attic;
26using HeuristicLab.Persistence.Default.Xml;
27
28namespace HeuristicLab.Clients.Hive {
29  public static class PersistenceUtil {
30    public static byte[] Serialize(object obj, out IEnumerable<Type> types) {
31      var ser = new ProtoBufSerializer();
32      var bytes = ser.Serialize(obj, out SerializationInfo info);
33      types = info.SerializedTypes;
34      return bytes;
35    }
36
37    public static byte[] Serialize(object obj) {
38      var ser = new ProtoBufSerializer();
39      return ser.Serialize(obj);
40    }
41
42    public static T Deserialize<T>(byte[] sjob) {
43      var ser = new ProtoBufSerializer();
44      try {
45        return (T)ser.Deserialize(sjob);
46      } catch (PersistenceException e) {
47        if (e.InnerException is InvalidDataException) {
48          // We assume the data was not serialized with HEAL.Attic, but with the former
49          // XML-based persistence
50          return DeserializeWithXmlParser<T>(sjob);
51        } else throw;
52      }
53    }
54
55    private static T DeserializeWithXmlParser<T>(byte[] sjob) {
56      using (MemoryStream memStream = new MemoryStream(sjob)) {
57        return XmlParser.Deserialize<T>(memStream);
58      }
59    }
60  }
61}
Note: See TracBrowser for help on using the repository browser.