我需要对提供程序拒绝和/或无法提供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>