Если я правильно понял вашу задачу, то:
-На входе имеем некий XML-контент и набор типов, сгенерированных xsd
-Требуется понять, какой из типов использовать для десериализации данного XML
Можно сделать, например, так:
public object Deserialize( Stream stream, out Type type )
{
var type = DetectType( stream );
var ser = new XmlSerializer( type );
return ser.Deserialize( stream );
}
static Type DetectType( Stream stream )
{
var settings = new XmlReaderSettings
{
CloseInput = false,
IgnoreComments = true,
IgnoreProcessingInstructions = true,
};
long pos = stream.Position;
try
{
using ( var reader = XmlReader.Create( stream, settings ) )
{
reader.MoveToContent();
switch ( reader.LocalName )
{
case "systemError": return typeof( systemErrorType );
case "result": return typeof( resultType );
default:
throw new InvalidOperationException( "Unknown xml format" );
}
}
}
finally { stream.Position = pos; }
}