序列化

时间:2015-05-28 14:49:47

标签: c# xml xml-serialization xmlserializer

我需要在没有任何namespacetype声明的情况下获得清晰的xml。这是序列化的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();
    }
}

请帮忙。感谢。

1 个答案:

答案 0 :(得分:0)

我一直在使用正则表达式

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}");