使用Newtonsoft

时间:2019-02-16 16:41:46

标签: c# json

我看到很多关于我要做什么的问题和答案,但是在阅读答案后,我无法从json中获取键和值。

这是要返回的json:

      {
"@odata.context": "https://con813-crm612cf723bbf35af6devaos.cloudax.dynamics.com/data/$metadata#Customers(CustomerAccount,Name)",
"value": [
    {
        "@odata.etag": "W/\"JzAsMjI1NjU0MjE1NTg7MCwwOzAsNTYzNzE0NTMyODswLDU2MzcxNDQ1NzY7MCwyMjU2NTQyNTY5MzswLDIyNTY1NDI3MjM2OzAsMDswLDIyNTY1NDI3MjM2OzAsMjI1NjU0MjcyMzY7MCwwJw==\"",
        "CustomerAccount": "DE-001",
        "Name": "Contoso Europe"
    },
    {
        "@odata.etag": "W/\"JzAsMjI1NjU0MjE1NTk7MCwwOzAsMzU2MzcxNDkxMTI7MCw1NjM3MTQ0NTc3OzAsMjI1NjU0MjU2OTQ7MCwyMjU2NTQyNzIzODswLDA7MCwyMjU2NTQyNzIzODswLDIyNTY1NDI3MjM4OzAsMCc=\"",
        "CustomerAccount": "US-001",
        "Name": "Contoso Retail San Diego"
    },
    {
        "@odata.etag": "W/\"JzAsMjI1NjU0MjE1NjA7MCwwOzAsMzU2MzcxNDkxMTM7MCw1NjM3MTQ0NTc4OzAsMjI1NjU0MjU2OTU7MCwyMjU2NTQyNzI0MDswLDA7MCwyMjU2NTQyNzI0MDswLDIyNTY1NDI3MjQwOzAsMCc=\"",
        "CustomerAccount": "US-002",
        "Name": "Contoso Retail Los Angeles"
    }
]

}

我需要获取键的名称,在此示例中为“ CustomerAccount”和“ Name”,然后是它们的值。我不知道只返回那些值。

        JObject parsedJson = JObject.Parse(_json);

        StringBuilder builder = new StringBuilder();

        foreach (JProperty property in parsedJson.Properties())
        {
            builder.Append((string.Format("Name: [{0}], Value: [{1}].", property.Name, property.Value)));
        }

希望增加清晰度;在此示例中,我想在“ @ odata.etag”之后写出键/值,其中键为“ CustomerAccount”和“ Name”,其值在冒号之后。键/值是动态的,因此我需要遍历写出每个“ @ odata.etag”值后面的键名和值。

1 个答案:

答案 0 :(得分:0)

使用JsonConvert.DeserializeObject并传递要解析的对象的类型。末尾缺少一个闭合的花括号。希望我理解您要正确执行的操作,如果没有,请发表评论

    class Value
    {
        public string CustomerAccount { get; set; }
        public string Name { get; set; }

    }

    class Customer
    {
        public List<Value> Value { get; set; }

    }
    class Program
    {
        static void Main(string[] args)
        {

          var obj =  JsonConvert.DeserializeObject<Customer>(@"     {
            '@odata.context': 'https://con813-crm612cf723bbf35af6devaos.cloudax.dynamics.com/data/$metadata#Customers(CustomerAccount,Name)',
            'value': [
            {
                '@odata.etag': 'W/\'JzAsMjI1NjU0MjE1NTg7MCwwOzAsNTYzNzE0NTMyODswLDU2MzcxNDQ1NzY7MCwyMjU2NTQyNTY5MzswLDIyNTY1NDI3MjM2OzAsMDswLDIyNTY1NDI3MjM2OzAsMjI1NjU0MjcyMzY7MCwwJw==\'',
                'CustomerAccount': 'DE-001',
                'Name': 'Contoso Europe'
            },
            {
                '@odata.etag': 'W/\'JzAsMjI1NjU0MjE1NTk7MCwwOzAsMzU2MzcxNDkxMTI7MCw1NjM3MTQ0NTc3OzAsMjI1NjU0MjU2OTQ7MCwyMjU2NTQyNzIzODswLDA7MCwyMjU2NTQyNzIzODswLDIyNTY1NDI3MjM4OzAsMCc=\'',
                'CustomerAccount': 'US-001',
                'Name': 'Contoso Retail San Diego'
            },
            {
                '@odata.etag': 'W/\'JzAsMjI1NjU0MjE1NjA7MCwwOzAsMzU2MzcxNDkxMTM7MCw1NjM3MTQ0NTc4OzAsMjI1NjU0MjU2OTU7MCwyMjU2NTQyNzI0MDswLDA7MCwyMjU2NTQyNzI0MDswLDIyNTY1NDI3MjQwOzAsMCc=\'',
                'CustomerAccount': 'US-002',
                'Name': 'Contoso Retail Los Angeles'
            }
            ]
            }");

            foreach (var value in obj.Value)
            {
                Console.WriteLine($"Name: 'Name' Value: {value.Name}");
                Console.WriteLine($"Name: 'CustomerAccount' Value: {value.CustomerAccount}");
            }

        }
    }

如果您不知道对象的键(属性是动态的),则可以使用以下代码段,但需要在类声明中进行更改。

class Customer
{
    //this is list of value objects (value is a dictionary) 
    public List<Dictionary<String,String>> Value { get; set; }

}

这是反序列化和循环遍历值数组的方法

   var obj =  JsonConvert.DeserializeObject<Customer>(myString);

   foreach (var value in obj.Value)
   {
         foreach (var key in value)
         {
             if (key.Key == "@odata.etag")
                 continue;
             Console.WriteLine("Name: [{0}], Value: [{1}]",key.Key, key.Value);
         }
   }