-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)
|
||||
[Test]
|
||||
public void DeserializeDecimalsWithCulture()
|
||||
@@ -8126,4 +8149,14 @@ Parameter name: value",
|
||||
public double Height { 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)
|
||||
{
|
||||
if (!fieldInfo.IsStatic)
|
||||
{
|
||||
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.Return();
|
||||
}
|
||||
@@ -245,7 +251,12 @@ namespace Newtonsoft.Json.Utilities
|
||||
|
||||
generator.Emit(OpCodes.Ldarg_1);
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user