.Net将JSON反序列化为c#对象[复制]

问题描述 投票:1回答:2

这个问题在这里已有答案:

我正在努力将json转换为c#对象。

我的json是由另一个app(在typescript中)生成的,这里是用于生成json的对象的结构:

enter image description here

有了这个结构,我就可以创建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; }
}

但这对我来说似乎有点“硬编码”。有没有办法为我的模型提供一个漂亮/更好的模型结构?

c# .net json deserialization
2个回答
6
投票

如果你有Json,那么你可以使用visual studio本身生成C#类。

在visual studio中找到“选择性粘贴”菜单。即复制json字符串并单击Paste special,它将为您生成C#类。

你可以关注我的帖子:Generate Class From JSON or XML in Visual Studio


1
投票

如果您决定使用特定的JSON架构并在两个应用程序中使用它,那将会更好。更详细的JSON将帮助我更好地了解您。

© www.soinside.com 2019 - 2024. All rights reserved.