有没有办法强制XmlTypeAttribute.TypeName中的确切URL?

时间:2019-07-24 09:27:23

标签: c# xml soap xml-attribute

我需要对提供程序拒绝和/或无法提供WSDL的某些服务实施调用。

我无法序列化为XML。

XmlTypeAttribute.TypeName中的URL被编码。

由于我从提供程序那里得到了一些XML示例,所以我尝试使用Edit => Paste Special => Paste XML As Classes生成类,但是它只是忽略了“ type”。

我已经手动创建了适当的类,除URL部分外,其他所有东西都起作用。

我已经检查过:C# Escaping XmlType Name with special char within XmlType() Attribute 因为它非常相似,但是我的问题不是缺少命名空间。

这是我现在拥有的:

    [XmlRoot(Namespace = @"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd")]
    public class Book
    {
        public string Title;
        public string Author;
    }

    [XmlType(TypeName = @"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText", Namespace = @"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd")]
    public class MyBookType : Book { }

    [XmlInclude(typeof(MyBookType))]
    [XmlRoot("Books", Namespace = @"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd")]
    public class Books : List<Book> { }

    public void Main()
    {
        var b = new Books();
        b.Add(new MyBookType
        {
            Title = "The Art of War",
            Author = "Sun Tzu"
        });
        b.Add(new MyBookType
        {
            Title = "Great Expectations",
            Author = "Charles Dickens"
        });

        var s = new XmlSerializer(typeof(Books));
        s.Serialize(Console.Out, b);
    }
我期望的

XML:

<?xml version="1.0" encoding="utf-8"?>
<Books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
  <Book xsi:type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">
    <Title>The Art of War</Title>
    <Author>Sun Tzu</Author>
  </Book>
  <Book xsi:type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">
    <Title>Great Expectations</Title>
    <Author>Charles Dickens</Author>
  </Book>
</Books>

我得到的XML:

<?xml version="1.0" encoding="utf-8"?>
<Books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
  <Book xsi:type="http_x003A__x002F__x002F_docs.oasis-open.org_x002F_wss_x002F_2004_x002F_01_x002F_oasis-200401-wss-username-token-profile-1.0_x0023_PasswordText">
    <Title>The Art of War</Title>
    <Author>Sun Tzu</Author>
  </Book>
  <Book xsi:type="http_x003A__x002F__x002F_docs.oasis-open.org_x002F_wss_x002F_2004_x002F_01_x002F_oasis-200401-wss-username-token-profile-1.0_x0023_PasswordText">
    <Title>Great Expectations</Title>
    <Author>Charles Dickens</Author>
  </Book>
</Books>

0 个答案:

没有答案