Как сериалиpовать неизвестный IDictionary
От: Barbar1an Украина  
Дата: 24.12.24 18:38
Оценка:
    Serialize(BinaryWriter writer, object val, Type type)
    {
        if(val is IDictionary d)
        {
            writer.Write7BitEncodedInt(d.Count);
        
            foreach(var i in d)
            {
                Serialize(writer, /* нужно из i достать значение Key */, type.GenericTypeArguments[0]);
                Serialize(writer, /* нужно из i достать значение Value */, type.GenericTypeArguments[1])
            }
        }
    }
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re: Как сериалиpовать неизвестный IDictionary
От: rameel https://github.com/rsdn/CodeJam
Дата: 24.12.24 19:49
Оценка: 11 (2) +1
Здравствуйте, Barbar1an, Вы писали:


B>
B>    Serialize(BinaryWriter writer, object val, Type type)
B>    {
B>        if(val is IDictionary d)
B>        {
B>            writer.Write7BitEncodedInt(d.Count);
        
B>            foreach(var i in d)
B>            {
B>                Serialize(writer, /* нужно из i достать значение Key */, type.GenericTypeArguments[0]);
B>                Serialize(writer, /* нужно из i достать значение Value */, type.GenericTypeArguments[1])
B>            }
B>        }
B>    }
B>


i в твоем случае — это DictionaryEnrty, который объявлен примерно так:
public struct DictionaryEntry
{
    public object Key { get; set; }
    public object? Value { get; set; }
}


https://learn.microsoft.com/en-us/dotnet/api/system.collections.dictionaryentry?view=net-9.0

Ну и в догонку, IDictionary необязательно представляет собой IDictionary<TKey, TValue>
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.