最近、私は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ライブラリの欠陥か、それともデザインによる振る舞いですか?後者の場合は、そのような問題を避けるためのベストプラクティスは何ですか?
http://stackoverflow.com/questions/12334382/net-webapi-serialization-k-backingfield-nastiness –