在序列化时从XML中删除类型声明

本文关键字:删除 类型 声明 XML 序列化 | 更新日期: 2023-09-27 17:50:58

我需要得到清晰的xml没有任何namespacetype声明。下面是序列化后的xml:

<placeBetRequest p1:type="PlaceBetRequestTeamed" xmlns:p1="http://www.w3.org/2001/XMLSchema-instance">
...
</placeBetRequest>

需要以某种方式配置XmlSerializer来设置它不添加任何属性,但只有我的(如果我用[XmlAttribte]设置它们)干净的XML需要看起来像这样:

<placeBetRequest>
...
</placeBetRequest>
这是我的序列化方法:
public static string XmlConvert<T>(T obj, params Type[] wellKnownTypes) where T : class
{
    var emptyNamepsaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
    var settings = new XmlWriterSettings {Indent = true, OmitXmlDeclaration = true};
    XmlSerializer serializer = wellKnownTypes == null
        ? new XmlSerializer(typeof(T))
        : new XmlSerializer(typeof(T), wellKnownTypes);
    using (var stream = new StringWriter())
    using (var writer = XmlWriter.Create(stream, settings))
    {
        serializer.Serialize(writer, obj, emptyNamepsaces);
        return stream.ToString();
    }
}

请帮助。谢谢。

在序列化时从XML中删除类型声明

我一直在使用regex

string input = 
    "<p1:placeBetRequest p1:type='"PlaceBetRequestTeamed'" xmlns:p1='"http://www.w3.org/2001/XMLSchema-instance'">" +
    "</p1:placeBetRequest>";
    string pattern = @"(?'prefix''</?)(?'ns'[^:]*:)";
    string output = Regex.Replace(input, pattern, "${prefix}");