"$ type"という名前のjsonプロパティ名に問題があるようです。
名前を「$ typ」または「$ typee」に変更すると、動作しているようです。
は、最初に私は目に見えないUnicode文字があると思ったが、これはJon Skeet's Unicode ExplorerにJSONと属性値の両方私は以来、コピー&ペーストの場合ではないようですし、私は
using Newtonsoft.Json;
using System;
namespace ConsoleAppCompare
{
class Program
{
static void Main(string[] args)
{
string json = @"{
""$type"": ""someText"",
""$someName"": ""MoreText"",
""$ThisWorksToo"": ""en"",
""Counting"": true
}";
var movie = JsonConvert.DeserializeObject<Movie>(json);
Console.WriteLine("Type:"+ movie.type); //type is null here
Console.ReadLine();
}
}
class Movie
{
[JsonProperty(PropertyName = "$type")]
public string type { get; set; }
[JsonProperty(PropertyName = "$someName")]
public string Name { get; set; }
[JsonProperty(PropertyName = "$ThisWorksToo")]
public string Language { get; set; }
public bool Counting { get; set; }
}
}
奇妙なものを見ることができません
誰か説明がありますか? 私はNewtonsoft.Json.10.0.3
を使用してい更新それは私がそれはNewtonsoft.Jsonに名前を予約して使用され
string json = @"{
""$someName"": ""MoreText"",
""$ThisWorksToo"": ""en"",
""$type"": ""someText"",
""Counting"": true
}";
私は決定的なを持っていないが、私は、 '$のtype'がが連載されているクラスの実際の型を格納するために使用newtonsoftで予約名、であると考えている:指定JsonSerializerSettingsによってシリアライズ/デシリアライゼーションのために有効になっています。 https://www.newtonsoft.com/json/help/html/SerializeTypeNameHandling.htmを参照して、タイプのフルネームが$ typeというプロパティにどのように格納されているかを確認します。この競合を起こさずにプロパティ名を使用できるようにnewtonsoftを構成する方法はわかりません。 – Will
これは、このプロパティがクラスのTypeのシリアル化に使用されたためです。 – eocron
heh、おそらく間違っている可能性があります... – Gabriel