【发布时间】:2017-11-20 11:03:10
【问题描述】:
我正在努力将 json 转换为 c# 对象。
我的 json 是由另一个应用程序(在 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: "foo@bar.fr" }
},
]
}
]
}
我已经设法使用这个模型解析我的 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; }
}
但这对我来说似乎有点“硬编码”。有没有办法为我的模型提供一个更好/更好的模型结构?
【问题讨论】:
-
我不清楚为什么你有四个不同的节点类,它们都具有相同的结构。那不能只是
UnaryNode吗? (我还强烈建议您开始为您的属性遵循 .NET 命名约定。) -
查看我的答案并借助 Visual Studio ..无需详细了解 json 的结构,Visual Studio 为您工作
-
请注意,只要属性括号中的 JSON 名称与您一样,您可以随意命名 C# 类和属性。
-
在 JSON 中,名称用 "" 括起来,即 { "key": "123" },而不是 { key: "123" }
-
您好,感谢您的回答,实际上我原帖中的所有示例都是出于演示目的,不是我的实际代码或 json,我会更新我的帖子
标签: c# .net json deserialization