“ JsonPropertyAttribute”由于其保护级别而无法访问

时间:2019-04-15 14:15:19

标签: c# json

尝试解析JSON文件,由于其保护级别,我无法访问错误“ JsonPropertyAttribute”。 应该修改什么以消除此错误?

我尝试为JsonProperty添加一个公共构造函数,但这导致了另一个错误,即JsonProperty不是属性类。

using System;
using System.Collections.Generic;
using System.Globalization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;


namespace NordstromRack
{
    public partial class ReadJson
    {
        [JsonProperty("items")]
        public Item[] Items { get; set; }
    }

    public partial class Item
    {
        [JsonProperty("url")]
        public Uri Url { get; set; }

        [JsonProperty("item_xpath", NullValueHandling = NullValueHandling.Ignore)]
        public string ItemXpath { get; set; }

        [JsonProperty("item_size")]
        public string ItemSize { get; set; }
    }

    public partial class ReadJson
    {
        public static ReadJson FromJson(string json) => JsonConvert.DeserializeObject<ReadJson>(json, QuickType.Converter.Settings);
    }

    public static class Serialize
    {
        public static string ToJson(this ReadJson self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
    }

    internal static class Converter
    {
        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
        {
            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
            DateParseHandling = DateParseHandling.None,
            Converters =
            {
                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
            },
        };
    }
}

以下是JSON文件

{
    "items": [{
            "url": "https://www.nordstromrack.com/shop/Women/Clothing/Activewear/Jackets%20&%20Hoodies",
            "item_xpath": "//*[@href='/shop/product/2299794/nike-vintage-drawstring-hoodie?color=BLACK%2FSAIL']",
            "item_size": "//*[@href='?color=TRUBER%2FSAIL&size=L']"
        },

        {
            "url": "https://www.nordstromrack.com/shop/product/2843153/blu-pepper-leopard-tie-sleeve-dress?color=LAVENDER",
            "item_size": "//*[@href='?color=LAVENDER&size=L']"
        },
        {
            "url": "https://www.nordstromrack.com/events/281375/products/2584102/j-crew-cotton-cardigan?color=BLACK",
            "item_xpath": "//*[@href='/events/281375/products/2584102/j-crew-cotton-cardigan?color=BLACK']",
            "item_size": "//*[@href='?color=BLACK&size=M']"
        }
    ]
}

2 个答案:

答案 0 :(得分:1)

  

由于其保护级别而无法访问。[...]我尝试为JsonProperty添加一个公共构造函数,但它导致了另一个错误,即JsonProperty不是属性类。

您似乎出于某种原因创建了自己的JsonPropertyAttribute类。无法访问,因为它没有可访问性修饰符,因此不公开。

在粘贴一些生成的代码时,您可能多次按下 Ctrl + Alt + Enter ,导致Visual Studio或ReSharper为您生成此类。

只需从您的项目中删除该类。正确的lives in the Newtonsoft.Json namespace already

答案 1 :(得分:0)

有效的方法是通过NuGet软件包安装Newtonsoft.json。显然,即使未安装,也可以将其作为软件包导入,但需要安装。 希望这对遇到与我一样的错误的人有所帮助!