- Timestamp:
- 05/27/14 10:13:24 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Persistence/3.3/Default/Xml/Primitive/String2XmlSerializer.cs
r9456 r10895 20 20 #endregion 21 21 22 using System; 22 23 using System.Text; 23 24 using System.Text.RegularExpressions; 24 25 using HeuristicLab.Persistence.Core; 25 26 26 27 27 namespace HeuristicLab.Persistence.Default.Xml.Primitive { … … 42 42 sb.Append(s.Replace("]]>", "]]]]><![CDATA[>")); 43 43 sb.Append("]]>"); 44 return new XmlString(sb.ToString()); 44 s = special.Replace(sb.ToString(), m => ToBase64Tag(m.Value)); 45 return new XmlString(s); 45 46 } 46 47 47 private static Regex re = new Regex(@"<!\[CDATA\[((?:[^]]|\](?!\]>))*)\]\]>", RegexOptions.Singleline); 48 private static readonly Regex re = new Regex(@"<!\[CDATA\[((?:[^]]|\](?!\]>))*)\]\]>|<Base64>([^<]*)</Base64>", RegexOptions.Singleline); 49 private static readonly Regex special = new Regex(@"[\x00-\x08\x0b\x0c\x0e-\x1f]+", RegexOptions.Singleline); 50 51 private static string ToBase64Tag(string s) { 52 return new StringBuilder() 53 .Append("]]><Base64>") 54 .Append(Convert.ToBase64String(Encoding.ASCII.GetBytes(s))) 55 .Append("</Base64><![CDATA[") 56 .ToString(); 57 } 48 58 49 59 /// <summary> … … 55 65 StringBuilder sb = new StringBuilder(); 56 66 foreach (Match m in re.Matches(x.Data)) { 57 sb.Append(m.Groups[1]); 67 if (m.Groups[1].Success) 68 sb.Append(m.Groups[1].Value); 69 else if (m.Groups[2].Success) { 70 sb.Append(Encoding.ASCII.GetString(Convert.FromBase64String(m.Groups[2].Value))); 71 } 58 72 } 59 73 string result = sb.ToString();
Note: See TracChangeset
for help on using the changeset viewer.