|
@@ -1,6 +1,7 @@
|
|
using Lucene.Net.Documents;
|
|
using Lucene.Net.Documents;
|
|
using Newtonsoft.Json;
|
|
using Newtonsoft.Json;
|
|
using System;
|
|
using System;
|
|
|
|
+using System.ComponentModel;
|
|
using System.Globalization;
|
|
using System.Globalization;
|
|
|
|
|
|
namespace Masuit.LuceneEFCore.SearchEngine.Extensions
|
|
namespace Masuit.LuceneEFCore.SearchEngine.Extensions
|
|
@@ -33,11 +34,16 @@ namespace Masuit.LuceneEFCore.SearchEngine.Extensions
|
|
/// <returns></returns>
|
|
/// <returns></returns>
|
|
private static object ConvertTo(string value, Type type)
|
|
private static object ConvertTo(string value, Type type)
|
|
{
|
|
{
|
|
- if (null == value)
|
|
|
|
|
|
+ if (value == null)
|
|
{
|
|
{
|
|
return default;
|
|
return default;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (value.GetType() == type)
|
|
|
|
+ {
|
|
|
|
+ return value;
|
|
|
|
+ }
|
|
|
|
+
|
|
if (type.IsEnum)
|
|
if (type.IsEnum)
|
|
{
|
|
{
|
|
return Enum.Parse(type, value.ToString(CultureInfo.InvariantCulture));
|
|
return Enum.Parse(type, value.ToString(CultureInfo.InvariantCulture));
|
|
@@ -49,6 +55,24 @@ namespace Masuit.LuceneEFCore.SearchEngine.Extensions
|
|
return underlyingType!.IsEnum ? Enum.Parse(underlyingType, value.ToString(CultureInfo.CurrentCulture)) : Convert.ChangeType(value, underlyingType);
|
|
return underlyingType!.IsEnum ? Enum.Parse(underlyingType, value.ToString(CultureInfo.CurrentCulture)) : Convert.ChangeType(value, underlyingType);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ var converter = TypeDescriptor.GetConverter(value);
|
|
|
|
+ if (converter != null)
|
|
|
|
+ {
|
|
|
|
+ if (converter.CanConvertTo(type))
|
|
|
|
+ {
|
|
|
|
+ return converter.ConvertTo(value, type);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ converter = TypeDescriptor.GetConverter(type);
|
|
|
|
+ if (converter != null)
|
|
|
|
+ {
|
|
|
|
+ if (converter.CanConvertFrom(value.GetType()))
|
|
|
|
+ {
|
|
|
|
+ return converter.ConvertFrom(value);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
return Convert.ChangeType(value, type);
|
|
return Convert.ChangeType(value, type);
|
|
}
|
|
}
|
|
}
|
|
}
|