Неуниверсальный тип в открытый универсальный типC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Неуниверсальный тип в открытый универсальный тип

Сообщение Anonymous »

Мне нужен способ сопоставить неуниверсальный тип с универсальным типом для десериализации с помощью IValueResolver или IMemberValueResolver
Я нашел эту документацию, которая пересылается на тесты github.
Проблема в том, что существуют только сопоставления открытого универсального типа с неуниверсальным типом с использованием IValueResolver или между открытым универсальным типом и открытый универсальный тип. Этот способ работает так, как ожидалось.
Что мне нужно сделать, так это сопоставить универсальный тип с неуниверсальным типом (это работает) и наоборот для десериализации.Мои типы:

Код: Выделить всё

public sealed class Foo
{
public T? Value { get; set; }
}

public sealed class SerializableFoo
{
public string? TypeAQN { get; set; }

public string? Data { get; set; }
}
Я пытался создать сопоставление:

Код: Выделить всё

// Working
this.CreateMap(typeof(Foo), typeof(SerializableFoo), MemberList.None)
.ForMember(nameof(SerializableFoo.TypeAQN), opt => opt.MapFrom(typeof(TypeAQNValueResolver)))
.ForMember(nameof(SerializableFoo.Data), opt => opt.MapFrom(typeof(DataValueResolver)));

// not working
this.CreateMap(typeof(SerializableFoo), typeof(Foo), MemberList.None)
.ForMember(nameof(Foo.Value), opt => opt.MapFrom(typeof(SerializableToFooValueResolver)));

private sealed class TypeAQNValueResolver : IValueResolver
{
public string? Resolve(Foo source, SerializableFoo destination, string? destMember, ResolutionContext context) =>
typeof(T).AssemblyQualifiedName;
}

private sealed class DataValueResolver : IValueResolver
{
/// 
public string? Resolve(Foo source, SerializableFoo destination, string? destMember, ResolutionContext context) =>
source.Value?.ToString() ?? "";
}
Я пытался создать IValueResolve, используя один, два, три и даже 4 дженерика, и каждый раз среда выполнения выдает мне это исключение:
Изображение

Код: Выделить всё

The number of generic arguments provided doesn't equal the arity of the generic type definition.
Parameter name: instantiation
Независимо от того, сколько универсальных параметров я добавляю.
Как происходит сопоставление неуниверсального типа с открытым универсальным типом с помощью IValueResolver работает?
ДЕМО dotnetfiddle

Подробнее здесь: https://stackoverflow.com/questions/792 ... neric-type
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»