Ответ @SeM - это то, что, я думаю, является наиболее правильным решением в зависимости от того, как Microsoft создала сериализатор XML, но, поскольку мне нужно восстановить классы из XSD относительно , часто я решал, что лучше попробовать чтобы найти другое решение вместо того, чтобы вручную редактировать сгенерированные классы после каждой сборки.
В этом ключе я обнаружил, что вместо изменения сгенерированных классов я мог бы переопределить XmlSerializer, чтобы, если он сталкивался с контентом CDATA, он мог с ним справиться.
Конечно, это работает, только если CDATA находится в самом начале и в самом конце элемента. В этом отношении он подходит для моего варианта использования, но не всегда обеспечивает все варианты использования.
using (var fileStream = new System.IO.FileStream(tempFilePath,FileMode.Create))
{
var xmlwriter = new CustomXmlTextWriter(fileStream);
xmls.Serialize(xmlwriter, contents, ns);
}
И пользовательский писатель.
public class CustomXmlTextWriter : XmlTextWriter
{
//... constructor if you need it
public override void WriteString(string text)
{
if (text.StartsWith("<![CDATA[") && text.EndsWith("]]>"))
{
base.WriteRaw(text);
return;
}
base.WriteString(text);
}
}
Похоже, это то же самое, что и Microsoft.
https://referencesource.microsoft.com/#SMDiagnostics/System/ServiceModel/Diagnostics/PlainXmlWriter.cs,137