如果我的JSON是:
{ cat: 1, dog: 2, price: { initial: 1, new: 2 } }
是否可以将其反序列化为具有cat,dog,initialprice,newprice属性的单个类?
也许存在使用JsonProperty属性执行此操作的属性或方法。
我正在使用Newtonsoft.Json库。
答案 0 :(得分:3)
以下内容有点粗略但准备就绪,但我认为你正在努力做到这一点。 Casing与您的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);
}
我们已经定义了一个Price类型,以匹配JSON中的price属性自然反序列化的类型,使其成为私有,然后使用TestClass上的两个只读属性访问其成员。所以 - 代码将看到你想要的结构(四个属性,Cat,Dog,InitialPrice,NewPrice)从你定义的JSON输入解析。