使用C#/ NewtonSoft反序列化JSON时,是否可以压缩一些结果?

Nib*_*Pig 6 c# json json.net

如果我的JSON是:

{ cat: 1, dog: 2, price: { initial: 1, new: 2 } }

是否可以将其反序列化为具有cat,dog,initialprice,newprice属性的单个类?

也许存在使用JsonProperty属性执行此操作的属性或方法.

我正在使用Newtonsoft.Json库.

Pab*_*imo 3

以下内容有点粗糙,但我认为您正在尝试做的事情。大小写与 JSON 不同,因此如果不进行一些修改,它不会往返于您的输入。

    public class TestClass
    {
        public decimal Cat { get; set; }
        public decimal Dog { get; set; }
        [Newtonsoft.Json.JsonProperty]
        private Price Price { get; set; }

        [Newtonsoft.Json.JsonIgnore]
        public decimal InitialPrice
        {
            get { return this.Price.Initial; }
        }

        [Newtonsoft.Json.JsonIgnore]
        public decimal NewPrice
        {
            get { return this.Price.New; }
        }
    }

    class Price
    {
        public decimal Initial { get; set; }
        public decimal New { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

快速测试方法:

    static void Main(string[] args)
    {
        const string JSON = "{ cat: 1, dog: 2, price: { initial: 1, new: 2 } }";

        var deserialised = Newtonsoft.Json.JsonConvert.DeserializeObject<TestClass>(JSON);
        var serialised = Newtonsoft.Json.JsonConvert.SerializeObject(deserialised);
    }
Run Code Online (Sandbox Code Playgroud)

我们定义了一个 Price 类型,以匹配从 JSON 中的价格属性自然反序列化的内容,将其设为私有,然后使用 TestClass 上的两个只读属性访问其成员。因此,代码将看到从您定义的 JSON 输入解析出的您想要的结构(四个属性,Cat、Dog、InitialPrice、NewPrice)。