2016-11-20 18 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です。バージョンを確認し、そのフィールドが含まれている場合は、ここにリンクされているソリューションを適用する必要があります。

関連する問題