JSON属性名称名为" $ type"。
似乎存在问题如果我将名称更改为" $ typ"或" $ typee",它似乎正在工作。
起初我以为有一个看不见的Unicode字符,但事实并非如此,因为我将JSON和属性值同时复制到Jon Skeet的Unicode Explorer,而且我看不到任何奇怪的东西
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
更新如果我将属性移动到其他地方,这似乎在起作用
string json = @"{
""$someName"": ""MoreText"",
""$ThisWorksToo"": ""en"",
""$type"": ""someText"",
""Counting"": true
}";
您应该使用jsonserializersettings。用打击代码应对您的JSON字符串:
JsonSerializerSettings settings = new JsonSerializerSettings
{
MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
DateParseHandling = DateParseHandling.None
};
var movie = JsonConvert.DeserializeObject<Movie>(json,settings);
它是在newtonsoft.json中保留的名称,用于代表类的类型的序列化。通过指定jsonserializertings:
,它可以启用序列化/挑选化。new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.All
}