Re: Простенький такой вопросик про десериализацию
От: RushDevion Россия  
Дата: 28.03.11 17:44
Оценка:
Если я правильно понял вашу задачу, то:
-На входе имеем некий 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; }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.