C# .Net Xml空白反序列化
只是尝试使用附加的xml属性序列化和反序列化几个空格,以保留它们,如中所述(请参阅备注)。下面是一个简单的C#示例 结果xmlC# .Net Xml空白反序列化,c#,.net,xml,whitespace,C#,.net,Xml,Whitespace,只是尝试使用附加的xml属性序列化和反序列化几个空格,以保留它们,如中所述(请参阅备注)。下面是一个简单的C#示例 结果xml <WhitespaceTest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xml:space="preserve"> </WhitespaceTest> 是否可以使用IgnoreWhi
<WhitespaceTest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xml:space="preserve"> </WhitespaceTest>
是否可以使用IgnoreWhitespace=false将流包装在XmlReader中,并将其传递给XmlSerializer.Deserialize方法?@JssDWt Modified example,将IgnoreWhitespace设置为false(参见文章)。行为没有改变。同样的问题。似乎不可能正确地反序列化它。您找到了解决方法吗?@videokojot我找到了唯一的解决方法-您应该在序列化上手动添加“xml:space=preserve”属性(使用IXmlSerializable接口来实现这一点)。请参阅文章中的更新。@AndreyBurykin不幸的是,我无法控制生成的xml,因此我无法添加xml:space preserve属性…是否可以使用IgnoreWhitespace=false的XmlReader设置将流包装在XmlReader中,并将其传递给XmlSerializer.Deserialize方法?@JssDWt Modified example,将IgnoreWhiteSpace设置为false(请参阅文章)。行为没有改变。同样的问题。似乎不可能正确地反序列化它。您找到了解决方法吗?@videokojot我找到了唯一的解决方法-您应该在序列化上手动添加“xml:space=preserve”属性(使用IXmlSerializable接口来实现这一点)。请参阅文章中的更新。@AndreyBurykin不幸的是,我无法控制生成的xml,因此无法添加xml:space preserve属性。。。
<WhitespaceTest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xml:space="preserve"> </WhitespaceTest>
var str = "<WhitespaceTest xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xml:space='preserve'> </WhitespaceTest>";
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreWhitespace = false;
var reader = XmlReader.Create(new StringReader(str), settings);
var deserialized2 = serializer.Deserialize(reader) as WhitespaceTest;
if (deserialized2.Value != testValue)
throw new Exception();
public class Sample : IXmlSerializable
{
#region Properties
[XmlText]
public string Text { get; set; }
#endregion
#region IXmlSerializable members
public System.Xml.Schema.XmlSchema GetSchema()
{
return null;
}
public void ReadXml(System.Xml.XmlReader reader)
{
ReadXml(this, reader);
}
public void WriteXml(System.Xml.XmlWriter writer)
{
WriteXml(this, writer);
}
#endregion IXmlSerializable members
internal static void ReadXml(ILocalizedMappable serializable, System.Xml.XmlReader reader)
{
var node = new XmlDocument().ReadNode(reader);
if (node != null)
{
serializable.Text = node.InnerText;
}
}
internal static void WriteXml(ILocalizedMappable serializable, System.Xml.XmlWriter writer)
{
writer.WriteAttributeString("xml", "space", string.Empty, "preserve");
writer.WriteString(serializable.Text);
}
}