序列化为XML,删除名称空间、XML定义等

本文关键字:XML 空间 定义 删除 序列化 | 更新日期: 2023-09-27 18:04:44

我必须使用ServiceStack.Text.XmlSerializer.Serialize删除所有属性来序列化以下对象。我知道这是一个不好的做法,但我必须通过模拟XML与旧的c++编写的服务器对话(它是手动解析的),它不处理属性等

我的班级是

[DataContract(Namespace = "", Name = "DataValutaRequest")]
public class DateValueRequestPayload
{
    [DataMember()]
  
    public int Cross { get; set; }
    [DataMember()]
 
    public DateTime TradeDate { get; set; }
}

被序列化为

<?xml version="1.0" encoding="utf-8"?><DataValutaRequest xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><Cross>11</Cross><TradeDate>2015-07-27T00:00:00+02:00</TradeDate></DataValutaRequest>

我需要删除

<?xml version="1.0" encoding="utf-8"?>
xmlns:i="http://www.w3.org/2001/XMLSchema-instance"

我该怎么做呢?由于

UPDATE 1:这是不重复的,因为它与servicestack的序列化有关,而不是ms1…

序列化为XML,删除名称空间、XML定义等

xmlns:i XML命名空间是由。net的DataContractSerializer自动发出的,并且不提供省略它的选项。

删除它的唯一方法是序列化为XML,然后从原始XML中剥离属性,例如:

var xml = dto.ToXml()
    .Replace(" xmlns:i='"http://www.w3.org/2001/XMLSchema-instance'"","");
return xml;

如果您有更复杂的要求,您还可以考虑使用XDocument加载和删除XML。

如果您总是只需要删除这两个文本,您可以使用

serialized = serialized.Remove(0, @"<?xml version=""1.0"" encoding=""utf-8""?>".Length);
serialized = serialized.Remove(test.IndexOf(@"xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"), @"xmlns:i=""http://www.w3.org/2001/XMLSchema-instance".Length);

这是一种非常简单的方法,因为它实际上不会解析xml,所以如果您需要一个更通用的方法,您必须解析xml并使用该信息来删除部分