Added one more critical section to JSONMapper.Serialize(..)
parent
3677c6847b
commit
ccd0a507bc
|
@ -9,7 +9,7 @@
|
||||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||||
<AssemblyVersion>0.1.0.0</AssemblyVersion>
|
<AssemblyVersion>0.1.0.0</AssemblyVersion>
|
||||||
<FileVersion>0.1.0.0</FileVersion>
|
<FileVersion>0.1.0.0</FileVersion>
|
||||||
<PackageVersion>1.2.3</PackageVersion>
|
<PackageVersion>1.2.4</PackageVersion>
|
||||||
<TargetFrameworks>net5.0;net6.0</TargetFrameworks>
|
<TargetFrameworks>net5.0;net6.0</TargetFrameworks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|
|
@ -155,51 +155,56 @@ namespace ln.json.mapping
|
||||||
|
|
||||||
public virtual bool Serialize(object o, out JSONValue json)
|
public virtual bool Serialize(object o, out JSONValue json)
|
||||||
{
|
{
|
||||||
if (object.ReferenceEquals(null, o))
|
lock (mappings)
|
||||||
{
|
{
|
||||||
json = JSONNull.Instance;
|
if (object.ReferenceEquals(null, o))
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Type type = o.GetType();
|
|
||||||
|
|
||||||
if (RequestCustomSerialization(o, out json))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
if (TryGetMapping(type, out JSONMapping mapping))
|
|
||||||
{
|
|
||||||
json = mapping.ToJson(this, o);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (type.IsEnum)
|
|
||||||
{
|
|
||||||
if (type.GetCustomAttribute<FlagsAttribute>() != null)
|
|
||||||
{
|
{
|
||||||
Type enumBaseType = type.GetEnumUnderlyingType();
|
json = JSONNull.Instance;
|
||||||
o = Convert.ChangeType(o, enumBaseType);
|
return true;
|
||||||
ConstructorInfo constructor = typeof(JSONNumber).GetConstructor(new Type[]{ enumBaseType });
|
|
||||||
json = (JSONNumber)constructor.Invoke(new object[]{ o });
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
Type type = o.GetType();
|
||||||
|
|
||||||
|
if (RequestCustomSerialization(o, out json))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (TryGetMapping(type, out JSONMapping mapping))
|
||||||
{
|
{
|
||||||
json = new JSONString(Enum.GetName(type, o));
|
json = mapping.ToJson(this, o);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (type.IsPrimitive)
|
if (type.IsEnum)
|
||||||
{
|
{
|
||||||
throw new NotSupportedException(String.Format("JSONMapperBase: Unsupported primitive type found: {0}", type));
|
if (type.GetCustomAttribute<FlagsAttribute>() != null)
|
||||||
}
|
{
|
||||||
|
Type enumBaseType = type.GetEnumUnderlyingType();
|
||||||
|
o = Convert.ChangeType(o, enumBaseType);
|
||||||
|
ConstructorInfo constructor = typeof(JSONNumber).GetConstructor(new Type[] { enumBaseType });
|
||||||
|
json = (JSONNumber)constructor.Invoke(new object[] { o });
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
json = new JSONString(Enum.GetName(type, o));
|
||||||
|
}
|
||||||
|
|
||||||
if (TryBuildRememberedMapping(type,out mapping))
|
return true;
|
||||||
{
|
}
|
||||||
json = mapping.ToJson(this, o);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
if (type.IsPrimitive)
|
||||||
|
{
|
||||||
|
throw new NotSupportedException(
|
||||||
|
String.Format("JSONMapperBase: Unsupported primitive type found: {0}", type));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (TryBuildRememberedMapping(type, out mapping))
|
||||||
|
{
|
||||||
|
json = mapping.ToJson(this, o);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual bool Deserialize<T>(string jsonSource, out T v) => Deserialize(JSONParser.Parse(jsonSource), out v);
|
public virtual bool Deserialize<T>(string jsonSource, out T v) => Deserialize(JSONParser.Parse(jsonSource), out v);
|
||||||
|
|
Loading…
Reference in New Issue