Whenever I use DataContractContentSerializer or XmlContentSerializer, I find myself implementing the required ITypeResolver in more or less the same way:
public class UserTypeResolver : ITypeResolver
{
public Type Resolve(string localName, string xmlNamespace)
{
switch (xmlNamespace)
{
case "urn:grean:samples:user-sign-up":
switch (localName)
{
case "user-created":
return typeof(UserCreated);
case "email-verified":
return typeof(EmailVerified);
case "email-changed":
return typeof(EmailChanged);
default:
throw new ArgumentException(
"Unknown local name.",
"localName");
}
default:
throw new ArgumentException(
"Unknown XML namespace.",
"xmlNamespace");
}
}
}
It would be nice with a reusable class where you can simply supply the values; something like this would be nice:
var resolver = new TypeResolutionTable(
new TypeResolutionEntry("urn:grean:samples:user-sign-up", "user-created", typeof(UserCreated)),
new TypeResolutionEntry("urn:grean:samples:user-sign-up", "email-verified", typeof(EmailVerified)),
new TypeResolutionEntry("urn:grean:samples:user-sign-up", "email-changed", typeof(EmailChanged)));
TypeResolutionTable should obviously implement ITypeResolver.
Whenever I use
DataContractContentSerializer
orXmlContentSerializer
, I find myself implementing the requiredITypeResolver
in more or less the same way:It would be nice with a reusable class where you can simply supply the values; something like this would be nice:
TypeResolutionTable
should obviously implementITypeResolver
.