-Fixed serializing static fields
This commit is contained in:
@@ -5806,6 +5806,29 @@ To fix this error either change the environment to be fully trusted, change the
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void SerializeStaticField()
|
||||||
|
{
|
||||||
|
StaticFieldTestClass c = new StaticFieldTestClass
|
||||||
|
{
|
||||||
|
x = int.MaxValue
|
||||||
|
};
|
||||||
|
string json = JsonConvert.SerializeObject(c, Formatting.Indented);
|
||||||
|
|
||||||
|
Assert.AreEqual(@"{
|
||||||
|
""x"": 2147483647,
|
||||||
|
""y"": 2
|
||||||
|
}", json);
|
||||||
|
|
||||||
|
StaticFieldTestClass c2 = JsonConvert.DeserializeObject<StaticFieldTestClass>(@"{
|
||||||
|
""x"": -1,
|
||||||
|
""y"": -2
|
||||||
|
}");
|
||||||
|
|
||||||
|
Assert.AreEqual(-1, c2.x);
|
||||||
|
Assert.AreEqual(-2, StaticFieldTestClass.y);
|
||||||
|
}
|
||||||
|
|
||||||
#if !(NET20 || NETFX_CORE)
|
#if !(NET20 || NETFX_CORE)
|
||||||
[Test]
|
[Test]
|
||||||
public void DeserializeDecimalsWithCulture()
|
public void DeserializeDecimalsWithCulture()
|
||||||
@@ -8126,4 +8149,14 @@ Parameter name: value",
|
|||||||
public double Height { get; set; }
|
public double Height { get; set; }
|
||||||
public decimal Price { get; set; }
|
public decimal Price { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[JsonObject(MemberSerialization.OptIn)]
|
||||||
|
public class StaticFieldTestClass
|
||||||
|
{
|
||||||
|
[JsonProperty]
|
||||||
|
public int x = 1;
|
||||||
|
|
||||||
|
[JsonProperty]
|
||||||
|
public static int y = 2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -221,9 +221,15 @@ namespace Newtonsoft.Json.Utilities
|
|||||||
private void GenerateCreateGetFieldIL(FieldInfo fieldInfo, ILGenerator generator)
|
private void GenerateCreateGetFieldIL(FieldInfo fieldInfo, ILGenerator generator)
|
||||||
{
|
{
|
||||||
if (!fieldInfo.IsStatic)
|
if (!fieldInfo.IsStatic)
|
||||||
|
{
|
||||||
generator.PushInstance(fieldInfo.DeclaringType);
|
generator.PushInstance(fieldInfo.DeclaringType);
|
||||||
|
generator.Emit(OpCodes.Ldfld, fieldInfo);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
generator.Emit(OpCodes.Ldsfld, fieldInfo);
|
||||||
|
}
|
||||||
|
|
||||||
generator.Emit(OpCodes.Ldfld, fieldInfo);
|
|
||||||
generator.BoxIfNeeded(fieldInfo.FieldType);
|
generator.BoxIfNeeded(fieldInfo.FieldType);
|
||||||
generator.Return();
|
generator.Return();
|
||||||
}
|
}
|
||||||
@@ -245,7 +251,12 @@ namespace Newtonsoft.Json.Utilities
|
|||||||
|
|
||||||
generator.Emit(OpCodes.Ldarg_1);
|
generator.Emit(OpCodes.Ldarg_1);
|
||||||
generator.UnboxIfNeeded(fieldInfo.FieldType);
|
generator.UnboxIfNeeded(fieldInfo.FieldType);
|
||||||
generator.Emit(OpCodes.Stfld, fieldInfo);
|
|
||||||
|
if (!fieldInfo.IsStatic)
|
||||||
|
generator.Emit(OpCodes.Stfld, fieldInfo);
|
||||||
|
else
|
||||||
|
generator.Emit(OpCodes.Stsfld, fieldInfo);
|
||||||
|
|
||||||
generator.Return();
|
generator.Return();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user