这个问题在这里已有答案:
我正在努力将json转换为c#对象。
我的json是由另一个app(在typescript中)生成的,这里是用于生成json的对象的结构:
有了这个结构,我就可以创建json:
{
EQNode: { key: "userid", value: 5}
}
或者更复杂:
{
AndNode: [
{
EQNode: { key: "userid", value: 5 }
},
{
LikeNode: { key: "username", value: "foo" }
}
]
}
甚至更复杂:
{
AndNode: [
{
EQNode: { key: "userid", value: 5 }
},
{
OrNode: [
{
LikeNode: { key: "username", value: "foo" }
},
{
LikeNode: { key: "email", value: "[email protected]" }
},
]
}
]
}
我已经设法使用这个模型解析我的json:
public class EQNode
{
[JsonProperty("key")]
public string key { get; set; }
[JsonProperty("value")]
public int value { get; set; }
}
public class LikeNode
{
[JsonProperty("key")]
public string key { get; set; }
[JsonProperty("value")]
public string value { get; set; }
}
public class GTNode
{
[JsonProperty("key")]
public string key { get; set; }
[JsonProperty("value")]
public int value { get; set; }
}
public class LTNode
{
[JsonProperty("key")]
public string key { get; set; }
[JsonProperty("value")]
public int value { get; set; }
}
public class OrNode
{
[JsonProperty("EQNode")]
public EQNode EQ { get; set; }
}
public class AndNode
{
[JsonProperty("EQNode")]
public EQNode EQ { get; set; }
[JsonProperty("LikeNode")]
public LikeNode LIKE { get; set; }
[JsonProperty("GTNode")]
public GTNode GT { get; set; }
[JsonProperty("LTNode")]
public LTNode LT { get; set; }
[JsonProperty("OrNode")]
public List<OrNode> OR { get; set; }
[JsonProperty("AndNode")]
public List<OrNode> And { get; set; }
}
public class RootObject
{
[JsonProperty("AndNode")]
public List<AndNode> And { get; set; }
[JsonProperty("OrNode")]
public List<OrNode> OR { get; set; }
[JsonProperty("EQNode")]
public EQNode EQ { get; set; }
[JsonProperty("LikeNode")]
public LikeNode LIKE { get; set; }
[JsonProperty("GTNode")]
public GTNode GT { get; set; }
[JsonProperty("LTNode")]
public LTNode LT { get; set; }
}
但这对我来说似乎有点“硬编码”。有没有办法为我的模型提供一个漂亮/更好的模型结构?
如果你有Json,那么你可以使用visual studio本身生成C#类。
在visual studio中找到“选择性粘贴”菜单。即复制json字符串并单击Paste special,它将为您生成C#类。
如果您决定使用特定的JSON架构并在两个应用程序中使用它,那将会更好。更详细的JSON将帮助我更好地了解您。