As a follow up to my last post – the following extension methods make it easy to manually serialize claim sets:
public static XElement Serialize(
this ClaimSet set, IEnumerable<Type> knownTypes)
{
DataContractSerializer dcs = new DataContractSerializer(
set.GetType(),
knownTypes,
int.MaxValue,
false,
true,
null);
MemoryStream ms = new MemoryStream();
dcs.WriteObject(ms, set);
ms.Seek(0, SeekOrigin.Begin);
return XElement.Load(new XmlTextReader(ms));
}
public static XElement Serialize(
this IEnumerable<ClaimSet> claimSets, string rootName,
string rootNamespace, IEnumerable<Type> knownTypes)
{
XNamespace ns = XNamespace.Get(rootNamespace);
return new XElement(ns + rootName,
from cs in claimSets
select cs.Serialize(knownTypes));
}