无法使用名称 "$type" 反序列化 json 属性



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
}

相关内容

  • 没有找到相关文章

最新更新