Trabalhando com o SAML 2.0 no c # .NET 4.5

Eu estou tentando usar o .NET puro (sem classes externas, controles, ajudantes) para criar uma mensagem SAML. Eu encontrei algum código nas interwebs; é isso que eu tenho:

private static SamlAssertion createSamlAssertion()
{
    // Here we create some SAML assertion with ID and Issuer name. 
    SamlAssertion assertion = new SamlAssertion();
    assertion.AssertionId = "AssertionID";
    assertion.Issuer = "ISSUER";
    // Create some SAML subject. 
   SamlSubject samlSubject = new SamlSubject();
    samlSubject.Name = "My Subject";

    // 
    // Create one SAML attribute with few values. 
    SamlAttribute attr = new SamlAttribute();
    attr.Namespace = "http://daenet.eu/saml";
    attr.AttributeValues.Add("Some Value 1");
    //attr.AttributeValues.Add("Some Value 2");

    attr.Name = "My ATTR Value";

    // 
    // Now create the SAML statement containing one attribute and one subject. 
    SamlAttributeStatement samlAttributeStatement = new SamlAttributeStatement();
    samlAttributeStatement.Attributes.Add(attr);
    samlAttributeStatement.SamlSubject = samlSubject;

    // Append the statement to the SAML assertion. 
    assertion.Statements.Add(samlAttributeStatement);

    //return assertion
    return assertion;

}

e aqui está o código que estou usando para obter o XML:

var sb = new StringBuilder();
var settings = new XmlWriterSettings
{
    OmitXmlDeclaration = true,
    Encoding = Encoding.UTF8
};
using (var stringWriter = new StringWriter(sb))
using (var xmlWriter = XmlWriter.Create(stringWriter, settings))
using (var dictionaryWriter = XmlDictionaryWriter.CreateDictionaryWriter(xmlWriter))
{
    var samlAssertSerializer = new SamlSerializer();
    var secTokenSerializer = new WSSecurityTokenSerializer();
    assertion.WriteXml(
        dictionaryWriter,
        samlAssertSerializer,
        secTokenSerializer
    );
}

Isso parecia que ia funcionar. No entanto, a mensagem é produz é SAML versão 1.0 - eu preciso trabalhar com o 2.0.

Eu sei que posso fazer algum trabalho desleixado e substituir alguns valores aqui e ali e este sistema funcionaria bem. Existem poucas diferenças na mensagem, sendo a versão a mais importante. Estou tendo dificuldade em encontrar informações sobre o SAML 2.0 para .NET. Eu sei que o SAML 2.0 foi implementado no .NET recentemente. Eu estou usando o Framework 4.5, então eu deveria ter acesso a ele. A página do MSDN para SamlAssertion diz que "majorVersion" é uma constante, sempre definida como "1".

Eu estou supondo que há outro namespace que eu poderia estar trabalhando, mas eu não encontrei. Minha exigência é apenas para obter a mensagem XML SAML. Não preciso assinar com o X509, não preciso do token. Apenas a mensagem XML SAML.

Novamente, esta é uma questão tentando descobrir como fazer isso no .NET nativo. Eu encontrei vários helpers SAML e muitos códigos sobre como construir a mensagem manualmente - estou tentando encontrar a solução CORRECT, se ela existir.

EDIT: eu descobri que posso usar Saml2Assertion. No entanto, não consigo encontrar uma maneira de obter a mensagem SAML gravada no xml agora.

EDIT2: Eu encontrei como escrever o objeto Saml2Assersion para xml. Infelizmente, ele não mantém a sintaxe SAML, ele grava em XML puro sem<saml>&nbsp;Tag.