C# .Net Xml空白反序列化

C# .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

只是尝试使用附加的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>

是否可以使用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);
        }
    }