Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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
C# 使用JSON.Net反序列化程序反序列化动态JSON_C#_C# 4.0_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Json.net_Deserialization - Fatal编程技术网 elasticsearch,json.net,deserialization,C#,C# 4.0,elasticsearch,Json.net,Deserialization" /> elasticsearch,json.net,deserialization,C#,C# 4.0,elasticsearch,Json.net,Deserialization" />

C# 使用JSON.Net反序列化程序反序列化动态JSON

C# 使用JSON.Net反序列化程序反序列化动态JSON,c#,c#-4.0,elasticsearch,json.net,deserialization,C#,C# 4.0,elasticsearch,Json.net,Deserialization,我试图扩展这里给出的JSON.net示例 尝试从中学习JSON.net示例 对对象进行反序列化 班级结构: public class Rootobject { public int took { get; set; } public bool timed_out { get; set; } public _Shards _shards { get; set; } public Hits hits { get; set; } } public class _Shards { public int

我试图扩展这里给出的JSON.net示例 尝试从中学习JSON.net示例 对对象进行反序列化

班级结构:

public class Rootobject
{
public int took { get; set; }
public bool timed_out { get; set; }
public _Shards _shards { get; set; }
public Hits hits { get; set; }
}

public class _Shards
{
public int total { get; set; }
public int successful { get; set; }
public int failed { get; set; }
}

public class Hits
{
public int total { get; set; }
public float max_score { get; set; }
public Hit[] hits { get; set; }
}

public class Hit
{
public string _index { get; set; }
public string _type { get; set; }
public string _id { get; set; }
public float _score { get; set; }
public Inner_Hits inner_hits { get; set; }
}

public class Inner_Hits
{
public Testp11 testp11 { get; set; }
public Testp10 testp10 { get; set; }
}

public class Testp11
{
public Hits1 hits { get; set; }
}

public class Hits1
{
public int total { get; set; }
public float max_score { get; set; }
public Hit1[] hits { get; set; }
}

public class Hit1
{
public string _index { get; set; }
public string _type { get; set; }
public string _id { get; set; }
public _Nested _nested { get; set; }
public float _score { get; set; }
public _Source _source { get; set; }
}

public class _Nested
{
public string field { get; set; }
public int offset { get; set; }
public _Nested1 _nested { get; set; }
}

public class _Nested1
{
public string field { get; set; }
public int offset { get; set; }
public _Nested2 _nested { get; set; }
}

public class _Nested2
{
public string field { get; set; }
public int offset { get; set; }
}

public class _Source
{
public string pname { get; set; }
public Value[] values { get; set; }
}

public class Value
{
public string pid { get; set; }
public string[] val { get; set; }
}

public class Testp10
{
public Hits2 hits { get; set; }
}

public class Hits2
{
public int total { get; set; }
public float max_score { get; set; }
public Hit2[] hits { get; set; }
}

public class Hit2
{
public string _index { get; set; }
public string _type { get; set; }
public string _id { get; set; }
public _Nested3 _nested { get; set; }
public float _score { get; set; }
public _Source1 _source { get; set; }
}

public class _Nested3
{
public string field { get; set; }
public int offset { get; set; }
public _Nested4 _nested { get; set; }
}

public class _Nested4
{
public string field { get; set; }
public int offset { get; set; }
public _Nested5 _nested { get; set; }
}

public class _Nested5
{
public string field { get; set; }
public int offset { get; set; }
}

public class _Source1
{
public string pname { get; set; }
public Value1[] values { get; set; }
}

public class Value1
{
public string pid { get; set; }
public string[] val { get; set; }
}
在我调用json文档的函数中:

  string json = "{  \"took\": 2,  \"timed_out\": false,  \"_shards\": {    \"total\": 5,    \"successful\": 5,    \"failed\": 0  },  \"hits\": {    \"total\": 4,    \"max_score\": 8.225408,    \"hits\": [      { \"_index\": \"dev28\", \"_type\": \"Index_Type1\", \"_id\": \"user_2\", \"_score\": 8.225408, \"inner_hits\": { \"testp11\": { \"hits\": {              \"total\": 1, \"max_score\": 5.816241, \"hits\": [ { \"_index\": \"dev28\",                  \"_type\": \"Index_Type1\",                  \"_id\": \"user_2\",                  \"_nested\": {  \"field\": \"doc\",\"offset\": 0, \"_nested\": { \"field\": \"roles\", \"offset\": 0, \"_nested\": { \"field\": \"permissions\", \"offset\": 0 } } }, \"_score\": 5.816241, \"_source\": { \"pname\": \"Permission1\", \"values\": [ { \"pid\": \"S1_P1\", \"val\": [ \"V12\", \"V11\" ] } ] } } ] } },\"testp10\": { \"hits\": { \"total\": 1, \"max_score\": 5.816241, \"hits\": [ { \"_index\": \"dev28\", \"_type\": \"Index_Type1\",\"_id\": \"user_2\", \"_nested\": { \"field\": \"doc\", \"offset\": 0, \"_nested\": {\"field\": \"roles\", \"offset\": 0, \"_nested\": { \"field\": \"permissions\", \"offset\": 0}} }, \"_score\": 5.816241, \"_source\": {\"pname\": \"Permission2\",\"values\": [ {\"pid\": \"S1_P1\", \"val\": [\"V12\",\"V11\" ]} ] } } ] } } } }]} }";            

            dynamic objResultElasticData = (Rootobject)Newtonsoft.Json.JsonConvert.DeserializeObject(json, typeof(Rootobject));
在上面的类中,我有一个类叫做“public class internal_Hits”,其中In数据可以是动态的,并具有不同的名称。目前它有“Testp11”和“Testp10”,也可以有与“Testp11”具有相同层次结构的“Testp12”,有人可以给我一个指针,我如何实现这种动态行为

希望有人能给我指出正确的方向

问候,,
Jack

如果您的类属性正在动态更改,那么我认为您不能使用此解析器。 看看这个。这可能对你有帮助。

您可以利用Json.NET对Json名称/值对对象的访问能力来定义您的
内部点击次数,如下所示:

    public Dictionary<string, InnerHit> inner_hits { get; set; }

并获得静态检查正确性的优势。

您好,已验证的java脚本解析器链接您提供的内容,但如果您检查“dbc”提供的上述答案,看起来更清晰。谢谢你的回复。
public class Shards
{
    public int total { get; set; }
    public int successful { get; set; }
    public int failed { get; set; }
}

public class Nested
{
    public string field { get; set; }
    public int offset { get; set; }
    [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)] // Do not write the null value
    public Nested _nested { get; set; }
}

public class Value
{
    public string pid { get; set; }
    public List<string> val { get; set; }
}

public class Source
{
    public string pname { get; set; }
    public List<Value> values { get; set; }
}

public class Hit2
{
    public string _index { get; set; }
    public string _type { get; set; }
    public string _id { get; set; }
    public Nested _nested { get; set; }
    public double _score { get; set; }
    public Source _source { get; set; }
}

public class Hits2
{
    public int total { get; set; }
    public double max_score { get; set; }
    public List<Hit2> hits { get; set; }
}

public class InnerHits
{
    public Hits2 hits { get; set; }
}

public class Hit
{
    public string _index { get; set; }
    public string _type { get; set; }
    public string _id { get; set; }
    public double _score { get; set; }
    public Dictionary<string, InnerHits> inner_hits { get; set; }
}

public class Hits
{
    public int total { get; set; }
    public double max_score { get; set; }
    public List<Hit> hits { get; set; }
}

public class RootObject
{
    public int took { get; set; }
    public bool timed_out { get; set; }
    public Shards _shards { get; set; }
    public Hits hits { get; set; }
}
        var root = JsonConvert.DeserializeObject<RootObject>(json);