序列化为 XML 删除命名空间,xml 定义等
Serialize to XML removing namespaces, xml definition and so on
我必须使用 ServiceStack.Text.XmlSerializer.Serialize 删除所有属性来序列化以下对象。我知道这是一种不好的做法,但我必须通过模拟 XML(它是手动解析的)与旧的 c++ 编写的服务器进行对话,并且它不处理属性等
我的class是
[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"
我该怎么做?
谢谢
更新 1:这不是重复的,因为它与 servicestack 的序列化有关,而不是 MS 序列化...
如果你总是只需要删除这两个文本,你可以使用
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 并使用该信息删除零件。
xmlns:i
XML 命名空间由 .NET 的 DataContractSerializer 自动生成,不提供省略它的选项。
删除它的唯一真正方法是序列化为 XML,然后从原始 XML 中剥离属性,例如:
var xml = dto.ToXml()
.Replace(" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"","");
return xml;
如果您有更复杂的要求,您还可以查看加载和 removing XML with XDocument。
我必须使用 ServiceStack.Text.XmlSerializer.Serialize 删除所有属性来序列化以下对象。我知道这是一种不好的做法,但我必须通过模拟 XML(它是手动解析的)与旧的 c++ 编写的服务器进行对话,并且它不处理属性等
我的class是
[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"
我该怎么做? 谢谢
更新 1:这不是重复的,因为它与 servicestack 的序列化有关,而不是 MS 序列化...
如果你总是只需要删除这两个文本,你可以使用
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 并使用该信息删除零件。
xmlns:i
XML 命名空间由 .NET 的 DataContractSerializer 自动生成,不提供省略它的选项。
删除它的唯一真正方法是序列化为 XML,然后从原始 XML 中剥离属性,例如:
var xml = dto.ToXml()
.Replace(" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"","");
return xml;
如果您有更复杂的要求,您还可以查看加载和 removing XML with XDocument。