0
У меня есть класс, который я сериализацияКласса сериализация и пространство имен (XMLNS)
public partial class Security : MessageHeader
{
private Assertion assertionField;
[System.Xml.Serialization.XmlElementAttribute(Namespace = "urn:oasis:names:tc:SAML:2.0:assertion")]
public Assertion Assertion
{
get
{
return this.assertionField;
}
set
{
this.assertionField = value;
}
}
public override string Name
{
get { return "Security"; }
}
public override string Namespace
{
get { return "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"; }
}
[XmlIgnoreAttribute]
public string UserID { get; set; }
[XmlIgnoreAttribute]
public string FirstName { get; set; }
[XmlIgnoreAttribute]
public string LastName { get; set; }
[XmlIgnoreAttribute]
public string ReasonForSearch { get; set; }
public Security()
{
Assertion = new Assertion(UserID, FirstName, LastName, ReasonForSearch);
}
protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)
{
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("saml", "urn:oasis:names:tc:SAML:2.0:assertion");
XmlSerializer serializer = new XmlSerializer(typeof(Assertion));
serializer.Serialize(writer, Assertion, ns);
}
}
это, как я добавляю код заголовок
using (OperationContextScope scope = new OperationContextScope(healthixClient.InnerChannel))
{
Security msgHdr = new Security();
msgHdr.UserID = "TestUserID";
msgHdr.FirstName = "TestUserFirstName";
msgHdr.LastName = "TestUserLastName";
msgHdr.ReasonForSearch = "ReasonForSearch";
OperationContext.Current.OutgoingMessageHeaders.Add(msgHdr);
}
когда я сериализую и добавить в моем заголовке коды это выглядит как этот
<Security xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<saml:Assertion ID="saml_6691a2b1-2a08-4d10-9d90-b006727d0e02" IssueInstant="2013-09-09T15:38:16Z" Version="2.0" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
< rest of the Xml is correct >
Теперь, если я только изменить способ переопределения OnWriteHeaderContents к
protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)
{
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("saml", "urn:oasis:names:tc:SAML:2.0:assertion");
XmlSerializer serializer = new XmlSerializer(typeof(Security));
serializer.Serialize(writer, new Security(), ns);
}
заголовок выглядит следующим образом
<Security xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<Security xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
<saml:Assertion ID="saml_6691a2b1-2a08-4d10-9d90-b006727d0e02" IssueInstant="2013-09-09T15:29:09Z" Version="2.0">
< rest of the Xml is correct >
Что я хочу заголовок выглядеть это
<Security xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
<saml:Assertion ID="saml_6691a2b1-2a08-4d10-9d90-b006727d0e02" IssueInstant="2013-07-29T20:17:30.846Z" Version="2.0" xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
Я s должно быть интересно иметь несколько пространств имен, объявленных на одном и том же элементе http://stackoverflow.com/a/945246/1236044 (возможно, OnWriteStartHeader - лучшее место) – jbl
, что не помогает. Моя проблема заключается в добавлении моего сериализованного объекта в заголовок сообщения. – DotNetBeginner
Пожалуйста, покажите нам один из элементов, которые вы говорите «остальные правильные». Это скажет нам, что вы подразумеваете под «правильным». –