最近我在net35和net40 NewtonSoft Json库之间发现了令人讨厌的不同行为。对于net40,序列化的有效负载是好的。但是对于net35,序列化的有效载荷包括恼人的值k__BackingField。
以下是重现此问题的示例代码:
// Notice that there is no serializable attribute
public class SamplePayload
{
public Guid Id { get; set; }
}
static void Main(string[] args)
{
var writeStream = new MemoryStream();
var formatter = new JsonMediaTypeFormatter();
formatter.WriteToStreamAsync(typeof(SamplePayload), new SamplePayload(), writeStream, null, null).Wait();
Console.WriteLine(System.Text.Encoding.UTF8.GetString(writeStream.ToArray()));
}
如果引用net40 / net45 Json库,则序列化的有效负载类似于预期的“Id”。但是对于net35库,序列化的有效负载包括“k__BackingField”。
我想知道为什么会出现这样的行为差异?它是NewtonSoft Json库中的缺陷还是设计行为?如果是后者,那么避免此类问题的最佳做法是什么?
答案 0 :(得分:1)
.NET 3.5已经很老了,设计AFAIK就是k__BackingField
。摆脱它是well-documented。您需要检查版本以及何时包含该字段,请应用此处链接的解决方案。