Is it possible to use the KnownType's class name as the tag, rather then the parent classes? e.g.
This is an excerpt from a larger DataContract xml file,
[DataContract (Namespace = "projectNamespace")]
[KnownType(typeof(Warning)), KnownType(typeof(Error))]
public abstract class Message
{
protected Message(LogLevel logLevel, int percentUsed, string message)
{
this.LogLevel = logLevel;
this.LogMessage = message;
this.Percent = percentUsed;
}
internal readonly LogLevel LogLevel;
[DataMember] internal readonly int Percent;
[DataMember] internal readonly string LogMessage;
}
[DataContract (Name="Warning", Namespace = "projectNamespace")]
internal sealed class Warning : Message
{
public Warning(int percentUsed, string message) : base(LogLevel.Warn, percentUsed, message)
{
}
}
[DataContract(Name = "Error", Namespace = "projectNamespace")]
internal sealed class Error : Message
{
public Error(int percentUsed, string message) : base(LogLevel.Error, percentUsed, message)
{
}
}
public enum LogLevel
{
Warn, Error
}
What I saw:
<messages>
<Message i:type="Warning">
<PercentUsed>75</PercentUsed>
<LogMessage>75% used</LogMessage>
</Message>
<Message i:type="Error">
<PercentUsed>100</PercentUsed>
<LogMessage>0% remaining</LogMessage>
</Message>
</messages>
Expected:
<messages>
<Warning>
<PercentUsed>75</PercentUsed>
<LogMessage>75% used</LogMessage>
</Warning>
<Error>
<PercentUsed>100</PercentUsed>
<LogMessage>0% remaining</LogMessage>
</Error>
</messages>
Note how the Message has an annoying i:type="Error"
rather then just being a <Error>