Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当使用C#/NewtonSoft反序列化JSON时,您能将一些结果展平吗?_C#_Json_Json.net - Fatal编程技术网

当使用C#/NewtonSoft反序列化JSON时,您能将一些结果展平吗?

当使用C#/NewtonSoft反序列化JSON时,您能将一些结果展平吗?,c#,json,json.net,C#,Json,Json.net,如果我的JSON是: {cat:1,dog:2,price:{initial:1,new:2} 是否可以将其反序列化为一个具有属性cat、dog、initialprice、newprice的类 也许有一种属性或方法可以使用JsonProperty属性来实现这一点 我使用的是Newtonsoft.Json库。下面的内容有点粗糙,但我认为您正在尝试这样做。大小写与JSON不同,因此如果不做一些修改,它不会往返于输入 public class TestClass { p

如果我的JSON是:

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

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

也许有一种属性或方法可以使用JsonProperty属性来实现这一点


我使用的是Newtonsoft.Json库。

下面的内容有点粗糙,但我认为您正在尝试这样做。大小写与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; }
    }
快速测试方法:

    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);
    }
static void Main(字符串[]args)
{
const string JSON=“{cat:1,dog:2,price:{initial:1,new:2}”;
var deserialised=Newtonsoft.Json.JsonConvert.DeserializeObject(Json);
var serialized=Newtonsoft.Json.JsonConvert.serialized对象(反序列化);
}

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

好吧,这个JSON是无效的格式,所以JSON.net不会识别JSON.net解析这么精细,因为meI会研究这样的问题:如果这是您需要在3年后经常做的事情,最新版本的newtonsoft.json对此问题有何看法?这很好,但问题是我的json返回了大约6个级别,我不想创建5个类,每个类中都有一个属性指向下一个属性,如果我可以执行
[JsonProperty(“price.initial”)]
或类似的操作,但没问题:)我想你的建议以后会对我有用的!我想这可能没那么容易!您至少可以使用类似的方法自动生成一些类,但这仍然需要您在中插入访问器并导航生成的属性结构。