2016-11-20 34 views
0

最近我發現net35和net40 NewtonSoft Json庫之間存在一個惱人的不同行爲。對於net40,序列化的有效載荷是好的。但對於net35,序列化的有效載荷包含令人討厭的值k_BackingField。爲什麼net35和net40之間有不同的行爲NewtonSoft Json庫

這裏是一個示例代碼REPRO問題:

// 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

http://stackoverflow.com/questions/12334382/net-webapi-serialization-k-backingfield-nastiness –

回答

1

.NET 3.5很舊,並且k__BackingField有設計AFAIK。擺脫它是well-documented。您需要檢查版本及其何時包含該字段,然後應用此處鏈接的解決方案。

相關問題