0
CDataでプロパティをシリアル化するにはどうすればよいですか?私は、元のプロパティXmlIgnoreを作成し、XmlCDataSectionを返すプロパティを導入するなど、いくつかの異なるメソッドを試しました。これまでのところ誰も働いていません。CDataプロパティへの方法?
エラーを表示する以下の実行可能コンソールテストがあります。 Regexデータのシリアル化と逆シリアル化を可能にするには、これをどのように変更できますか?
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication1
{
using System.Diagnostics;
using System.IO;
using System.Threading;
using System.Xml;
using System.Xml.Serialization;
[Serializable]
public class MyRegex
{
public string Regex { get; set; }
}
public static class SerializerHelper<T>
{
public static string Serialize(T myobject)
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
StringWriter stringWriter = new StringWriter();
xmlSerializer.Serialize(stringWriter, myobject);
string xml = stringWriter.ToString();
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);
StringWriter sw = new StringWriter();
XmlTextWriter xw = new XmlTextWriter(sw);
xmlDoc.WriteTo(xw);
return sw.ToString();
}
public static T DeSerialize(string xml)
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
StringReader stringReader = new StringReader(xml);
return (T)xmlSerializer.Deserialize(stringReader);
}
}
class Program
{
static void Main(string[] args)
{
MyRegex original = new MyRegex { Regex = "\b[1-3]{1}\b#Must be a value of 1 to 3" };
string xml = SerializerHelper<MyRegex>.Serialize(original);
Console.WriteLine("--- SERIALIZE ---");
Console.WriteLine(xml);
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("--- DESERIALIZE ---");
MyRegex deSerial = SerializerHelper<MyRegex>.DeSerialize(xml);
Console.WriteLine("Equals? " + (deSerial.Regex.Equals(original.Regex)));
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("Console.ReadKey();");
Console.ReadKey();
}
}
}
追加:しようとしましたメソッドを置き換える -
private string _regex;
public string Regex
{
get { return _regex.Replace(@"\\", @"\").Replace("&", "&").Replace("<", "<").Replace(">", ">").Replace(""", "\"").Replace("'", "'"); }
set { _regex = value.Replace(@"\", @"\\").Replace("&", "&").Replace("<", "<").Replace(">", ">").Replace("\"", """).Replace("'", "'"); }
}
問題は、シリアライズしても関係なく、\ bまたは\\ bはXMLに対して無効なとしてシリアル化しようとします。だから私はそれをCDATAする必要があります。正規表現 - ' [1-3] {1} #1〜3の値にする必要があります。 RegexString> RegexString \\ [1-3] \\ {1} \\# \ be \\ a \\ value \\ of \\ 1 \\ 3 \/RegexString> ' –
CDATAはXMLに0〜31文字を入れるのに役立ちません... –
serialize関数で文字列xmlの下にあるハックの行。できます! \t \t \t xml = xml.Replace( ""、 "<![CDATA ["]; ' と' xml = xml.Replace( " RegexString>"、 "]]> RegexString>" ); 'どうしてこれを一般的に行うことができますか? –