에 대한 찾을 수 없습니다 : Typeconverter not working for single properties이TypeConverter를이 기본적으로 질문의 연속이다 재산
원래의 질문에 대한 답변이 표시된되지 않은, 그러나 그것은 모든 때문에 특히 내 프로젝트에서 특정 시나리오에 대한 앞으로의 방법이 될 듯 제 독서는 그것이 정말로 효과가 있어야한다고 제안합니다. 나는 한 번 슛을 주었지만 마지막 코멘트에서 언급 한 것과 같은 문제가 발생했다. (브레이크 포인트가 맞지 않거나 나의 경우 출력 결과 창에 아무런 출력이 없다.) 여기에 내가 시작하는 것이 있는데, 나의 필요를위한 기본 예제에서 †. LINQPad에서
는 출력이 문제가 1 일)는 TypeConverterAttribute
정의가 표시되지이다 제안
typeof(IEnumerable<String>)
System.Collections.Generic.IEnumerable`1[System.String]
ReferenceConverter
System.ComponentModel.ReferenceConverter
null
void Main()
{
var prop = typeof(Request).GetProperty("Names");
var converter = TypeDescriptor.GetConverter(prop.PropertyType.Dump()).Dump();
var value = converter.ConvertFrom("One,Two").Dump();
}
public class Request
{
[TypeConverter(typeof(EnumerableTypeConverter<string>))]
public IEnumerable<string> Names { get; set; }
}
public class EnumerableTypeConverter<T> : TypeConverter
{
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
new { Context = context, SourceType = sourceType }.Dump("CanConvertFrom");
if (sourceType == typeof(string))
return true;
return false;
}
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
{
new { Context = context, DestinationType = destinationType }.Dump("CanConvertTo");
return true;
}
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
{
new { Context = context, Culture = culture, Value = value }.Dump("ConvertFrom");
var source = value as string;
if (source == null)
return value.ToString();
return source;
}
public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
{
new { Context = context, Culture = culture, Value = value, DestinationType = destinationType }.Dump("ConvertTo");
var s = value as IEnumerable<string>;
return s != null ? string.Join(",", s) : base.ConvertFrom(context, culture, value);
}
public override bool IsValid(ITypeDescriptorContext context, object value)
{
new { Context = context, Value = value }.Dump("IsValid");
return true;
}
}
입니다
, 2) 내 정의를 찾는되지 않는다TypeConverter
또는 3) 생성 할 수 없으며 자동으로 실패합니다. 그들 모두는있을 법하지 않지만 분명히 결과는 거짓말하지 않습니다. 따라서 내 이해에서 무언가 저조합니다. 인스턴스를 직접 인스턴스화 할 때 예외가 발생하지 않았습니다.
var testConverter = new EnumerableTypeConverter<string>().Dump();
EnumerableTypeConverter<String>
UserQuery+EnumerableTypeConverter`1[System.String]
는 싱긋 웃음과 웃음, 나는 비 일반적인 접근 방식
[TypeConverter(typeof(EnumerableStringConverter))]
public IEnumerable<string> Names { get; set; }
public class EnumerableStringConverter : TypeConverter
{
// -- same implementation as EnumerableTypeConverter<T> --
}
을 시도했지만 같은 결과를 받았다. 내가 여기서 무엇을 놓치고 있니?
† 코드는 속성 이름 및 관련 값을 포함하는 파일을 읽습니다. 다음으로 이름으로 일치하는 속성을 찾고 변환기를 통해 값을 설정합니다. 실제 값 중 일부는 JSON 배열이지만, deserialize 된 JSON 배열을 일치하는 속성으로 반환하는 전체 솔루션을 만들기 전에 내가했던 일을 검증하기위한 작은 단계를 거쳤습니다.