0
다음 XML을 생성하려고하는데 XML을 serialize하는 것은 처음입니다. 아무도 내 <issuer>
요소가 나타나지 않는 이유를 설명 할 수 있습니까? 생성 무엇Xml serialization에서 자식 요소를 만들려고 시도하지 않습니다.
은 :
<samlp:Response xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="02279359-0581-41c7-a66b-199523ac8eab" IssueInstant="18:07:2014 10:41:37 AM" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" />
내가 생성 필요가 무엇 : 내가 이해하지 못하는 것은 내가들은 XMLElement로 발급자를 표시한다는 것입니다
<samlp:Response ID="02279359-0581-41c7-a66b-199523ac8eab" IssueInstant="18:07:2014 10:41:37 AM" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" >
<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">https://www.partner.com/sso</saml:Issuer>
</samlp:Response>
.
여기 내 코드입니다.
MySaml.cs
[Serializable]
[XmlRoot(ElementName = "Response", Namespace = "urn:oasis:names:tc:SAML:2.0:protocol", IsNullable = false)]
public class MySaml
{
[XmlAttribute("ID")]
public string ID { get; set; }
[XmlAttribute("Version")]
public const string Version = "2.0";
[XmlAttribute("IssueInstant")]
public string IssueInstant { get; set; }
[XmlAttribute("Destination")]
public const string Destination = "https://www.site.com/SC/SSO/SingleSignOn.aspx";
[XmlAttribute(Namespace = "xmlns", AttributeName = "samlp")]
public const string samlp = "urn:oasis:names:tc:SAML:2.0:protocol";
[XmlElement(Namespace = "urn:oasis:names:tc:SAML:2.0:assertion", ElementName = "Issuer", IsNullable = false)]
public readonly Issuer Issuer = new Issuer();
}
Issuer.cs
[Serializable]
public class Issuer
{
[XmlText]
public const string Text = "https://www.partner.com/sso";
[XmlAttribute(Namespace = "xmlns", AttributeName = "saml")]
public const string saml = "urn:oasis:names:tc:SAML:2.0:assertion";
}
마지막으로, 나는 SAML을 생성 (거기 추악한 문자열 조작을 용서하는 데 사용하려고 방법 - 나는 폭탄을 투하 할 예정이다.)
protected void Page_Load(object sender, EventArgs e)
{
GenerateSamlAssertion();
}
private void GenerateSamlAssertion()
{
var response = new MySaml();
response.ID = Guid.NewGuid().ToString();
response.IssueInstant = DateTime.UtcNow.ToString("dd:MM:yyyy hh:mm:ss tt");
SerializeXml(response);
}
public XmlDocument SerializeXml(MySaml mySaml)
{
var xmlSerializerNameSpace = new XmlSerializerNamespaces();
xmlSerializerNameSpace.Add("samlp", "urn:oasis:names:tc:SAML:2.0:protocol");
xmlSerializerNameSpace.Add("saml", "urn:oasis:names:tc:SAML:2.0:assertion");
var serializer = new XmlSerializer(typeof(MySaml));
using (var writer = new StringWriter())
{
try
{
serializer.Serialize(writer, mySaml, xmlSerializerNameSpace);
var doc = new XmlDocument();
doc.LoadXml(writer.ToString().Remove(0, writer.ToString().IndexOf("\r\n") + 1));
return doc;
}
finally
{
writer.Close();
}
}
}
내가 뭘 놓치고 있는지 알기 엔 어리 석거나 무언가가되어야한다. 사전에
감사합니다 :) 위해
그 얻었다. 감사. 쇼 전체에 무작위로 네임 스페이스가있는 문제가 있지만 다른 질문이 있습니다. – Eon
@ a-h, 이는 단지 속성 대 필드가 아니라'readonly' 키워드 때문이라고 생각합니다. – acelent
Paulo가 정확합니다. 답을 업데이트하겠습니다. –