Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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
.Net将JSON反序列化为c#对象_C#_.net_Json_Deserialization - Fatal编程技术网

.Net将JSON反序列化为c#对象

.Net将JSON反序列化为c#对象,c#,.net,json,deserialization,C#,.net,Json,Deserialization,我正在努力将json转换为c#对象 My json由另一个应用程序(在typescript中)生成。以下是用于生成My json的对象的结构: 通过这种结构,我可以创建json,比如: { EQNode: { key: "userid", value: 5} } 或更复杂: { AndNode: [ { EQNode: { key: "userid", value: 5 } }, {

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

My json由另一个应用程序(在typescript中)生成。以下是用于生成My 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" }
                },
            ]
        }
    ]
}
甚至更复杂:

{
    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; }
}
公共类EQNode
{
[JsonProperty(“密钥”)]
公共字符串密钥{get;set;}
[JsonProperty(“价值”)]
公共int值{get;set;}
}
公共类相似码
{
[JsonProperty(“密钥”)]
公共字符串密钥{get;set;}
[JsonProperty(“价值”)]
公共字符串值{get;set;}
}
公共类节点
{
[JsonProperty(“密钥”)]
公共字符串密钥{get;set;}
[JsonProperty(“价值”)]
公共int值{get;set;}
}
公共类LTNode
{
[JsonProperty(“密钥”)]
公共字符串密钥{get;set;}
[JsonProperty(“价值”)]
公共int值{get;set;}
}
公共类OrNode
{
[JsonProperty(“EQNode”)]
公共EQNode EQ{get;set;}
}
公共类和节点
{
[JsonProperty(“EQNode”)]
公共EQNode EQ{get;set;}
[JsonProperty(“likeode”)]
类似于{get;set;}的公共相似码
[JsonProperty(“GTNode”)]
公共GTNode GT{get;set;}
[JsonProperty(“LTNode”)]
公共LTNode LT{get;set;}
[JsonProperty(“OrNode”)]
公共列表或{get;set;}
[JsonProperty(“AndNode”)]
公共列表和{get;set;}
}
公共类根对象
{
[JsonProperty(“AndNode”)]
公共列表和{get;set;}
[JsonProperty(“OrNode”)]
公共列表或{get;set;}
[JsonProperty(“EQNode”)]
公共EQNode EQ{get;set;}
[JsonProperty(“likeode”)]
类似于{get;set;}的公共相似码
[JsonProperty(“GTNode”)]
公共GTNode GT{get;set;}
[JsonProperty(“LTNode”)]
公共LTNode LT{get;set;}
}

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

如果您随身携带Json,那么就可以使用visual studio本身生成C#类

在VisualStudio中找到“粘贴特殊”菜单。i、 复制json字符串并点击Paste special,它将为您生成C#类


您可以阅读我的帖子:

如果您随身携带Json,那么就可以使用visual studio本身生成C#类

在VisualStudio中找到“粘贴特殊”菜单。i、 复制json字符串并点击Paste special,它将为您生成C#类



你可以关注我的帖子:

如果你决定一个特定的JSON模式并在两个应用程序中使用它,那会更好。更详细的JSON将有助于我更好地了解您。

如果您决定一个特定的JSON模式,并在两个应用程序中都使用它,那就更好了。更详细的JSON将帮助我更好地了解情况。

我不清楚为什么有四个不同的节点类,它们都具有相同的结构。那难道不是
UnaryNode
?(我还强烈建议您开始为您的属性遵循.NET命名约定。)检查我的答案,并向visual studio寻求帮助。无需详细了解json的结构,visual studio确实适合您,正如您所知,只要属性括号中的json名称与您一样,你可以随意命名C#类和属性。在JSON中,名称包含在“”中,即{“key”:“123”},而不是{key:“123”}嗨,谢谢你的回答,事实上,我原来帖子中的所有示例都是为了演示,而不是我的实际代码或JSON,我将更新我的帖子。我不清楚为什么有四个不同的节点类,它们都具有相同的结构。那难道不是
UnaryNode
?(我还强烈建议您开始为您的属性遵循.NET命名约定。)检查我的答案,并向visual studio寻求帮助。无需详细了解json的结构,visual studio确实适合您,正如您所知,只要属性括号中的json名称与您一样,你可以随意命名C#类和属性。在JSON中,名称包含在“”中,即{“key”:“123”},而不是{key:“123”}嗨,谢谢你的回答,事实上,我原始帖子中的所有示例都是为了演示目的,而不是我的实际代码或JSON,我将更新我的帖子我一直使用的[link]我怎么不知道呢!?:D@IainGalloway-通过参加视觉研究在线培训,感谢您的回答。我不知道这个特性,我测试了它,但它的代码与我的相同(没有JsonProperty decorator和不同的函数名),我将更新我的帖子以获取更多信息。为了避免混淆,我从新开始,抱歉双重发布:我从来都不知道我总是使用[link]我怎么不知道呢!?:D@IainGalloway-通过参加视觉研究在线培训,感谢您的回答。我不知道这个特性,我测试了它,但它的代码与我的相同(没有JsonProperty装饰器,并且使用不同的函数名),我将更新我的帖子以获取更多信息。为了避免混淆,我从这里开始,抱歉重复发帖:谢谢你的回答,我将更新我的帖子以避免混淆,我从这里开始,抱歉重复发帖:谢谢你的回答我将更新我的帖子以避免混淆,我从这里开始,抱歉重复发帖: