C# 如何在c语言中解析双列表JSON数据#

C# 如何在c语言中解析双列表JSON数据#,c#,json,asp.net-mvc,web-services,C#,Json,Asp.net Mvc,Web Services,我通过调用以下格式的服务来获取JSON数据: [ [ { "AgentStatus": "- Active", "Basement": "None", "BasementType": "", "Baths": "4", "BathsHalf": "1", "Beds": "6" }, [ "372010-1.jpg" ] ], [ { "AgentS

我通过调用以下格式的服务来获取JSON数据:

[
  [
    {
      "AgentStatus": "- Active",
      "Basement": "None",
      "BasementType": "",
      "Baths": "4",
      "BathsHalf": "1",
      "Beds": "6"
    },
    [
      "372010-1.jpg"
    ]
  ],
  [
    {
      "AgentStatus": "- Active",
      "Basement": "Finished,Full",
      "BasementType": "FULL FINISHED",
      "Baths": "2",
      "BathsHalf": "1",
      "Beds": "3"
    },
    [
      "377388-1.jpg",
      "377388-2.jpg",
      "377388-12.jpg"
    ]
  ]
]
为了解析这个JSON,我创建了如下类:

public class RetsProperty
{
    public PropertyAttributes PropAttributes { get; set; }

    public string[] ImgUrls { get; set; }
}

public class PropertyAttributes
{
    public string AgentStatus { get; set; }

    public string Basement { get; set; }

    public string BasementType { get; set; }

    public string Baths { get; set; }

    public string BathsHalf { get; set; }

    public string Beds { get; set; }
}
我使用了NewtonSoftJSON来反序列化Json数据

var retsPropertyItems = Newtonsoft.Json.JsonConvert.DeserializeObject<List<RetsProperty>>(propertyJsonString);
var retsprPropertyItems=Newtonsoft.Json.JsonConvert.DeserializeObject(propertyJsonString);
但无法解析,返回以下错误:

我认为这是因为我无法正确创建类。

那么我该如何格式化我的类? 或者是否有可能绘制出我的工作方式?


谢谢

您的JSON格式非常糟糕,因为它在数组中有数组,而没有属性名。所以你应该仔细分析它

我提出了一个解决方案,它可能不是那么糟糕,也很容易理解(如果我正确理解您的JSON格式的话)。想法是用属性名包装您的JSON,然后解析他的构造

您应该以相同的方式包装您的JSON

var wrappedText = @"{ ""Prop"": " + propertyJsonString + " }";
然后,您可以使用Newtonsoft Json进行解析:

var jsonData = JObject.Parse(wrappedText);
现在您有了JSON数据,应该手动解析它。我建议你这样做:

List<RetsProperty> RetsProperties = new List<RetsProperty>();
foreach (var prop in jsonData["Prop"])
{
    RetsProperties.Add(new RetsProperty
        {
            ImgUrls = Newtonsoft.Json.JsonConvert.DeserializeObject<string[]>(prop.Last.ToString()),
            PropAttributes = Newtonsoft.Json.JsonConvert.DeserializeObject<PropertyAttributes>(prop.First.ToString())
        });
};
List retsprroperties=new List();
foreach(jsonData[“prop”]中的var prop)
{
添加(新的RetsProperty)
{
ImgUrls=Newtonsoft.Json.JsonConvert.DeserializeObject(prop.Last.ToString()),
PropAttribute=Newtonsoft.Json.JsonConvert.DeserializeObject(prop.First.ToString())
});
};

您应该了解,只有在最后一个数组中有2个数组项时,it才会起作用。看看
prop.First
prop.Last
你的JSON格式非常糟糕,因为它在数组中有数组,而没有属性名。所以你应该仔细分析它

我提出了一个解决方案,它可能不是那么糟糕,也很容易理解(如果我正确理解您的JSON格式的话)。想法是用属性名包装您的JSON,然后解析他的构造

您应该以相同的方式包装您的JSON

var wrappedText = @"{ ""Prop"": " + propertyJsonString + " }";
然后,您可以使用Newtonsoft Json进行解析:

var jsonData = JObject.Parse(wrappedText);
现在您有了JSON数据,应该手动解析它。我建议你这样做:

List<RetsProperty> RetsProperties = new List<RetsProperty>();
foreach (var prop in jsonData["Prop"])
{
    RetsProperties.Add(new RetsProperty
        {
            ImgUrls = Newtonsoft.Json.JsonConvert.DeserializeObject<string[]>(prop.Last.ToString()),
            PropAttributes = Newtonsoft.Json.JsonConvert.DeserializeObject<PropertyAttributes>(prop.First.ToString())
        });
};
List retsprroperties=new List();
foreach(jsonData[“prop”]中的var prop)
{
添加(新的RetsProperty)
{
ImgUrls=Newtonsoft.Json.JsonConvert.DeserializeObject(prop.Last.ToString()),
PropAttribute=Newtonsoft.Json.JsonConvert.DeserializeObject(prop.First.ToString())
});
};

您应该了解,只有在最后一个数组中有2个数组项时,it才会起作用。看看
prop.First
prop.Last

首先,您有一个非常奇怪的JSON,但正如您所说,您从外部服务接收它。您可以使用and解析这样的JSON,但是这个方法当然非常依赖于JSON的结构

var retsProperties = JArray.Parse(json)
    .Select(item => new RetsProperty
    {
        PropAttributes = item.First.ToObject<PropertyAttributes>(),
        ImgUrls = item.Last.ToObject<string[]>()
    })
    .ToList();
var retsProperties=JArray.Parse(json)
.选择(项=>new RetsProperty
{
PropAttribute=item.First.ToObject(),
ImgUrls=item.Last.ToObject()
})
.ToList();

首先,您有一个非常奇怪的JSON,但正如您所说,您从外部服务接收它。您可以使用and解析这样的JSON,但是这个方法当然非常依赖于JSON的结构

var retsProperties = JArray.Parse(json)
    .Select(item => new RetsProperty
    {
        PropAttributes = item.First.ToObject<PropertyAttributes>(),
        ImgUrls = item.Last.ToObject<string[]>()
    })
    .ToList();
var retsProperties=JArray.Parse(json)
.选择(项=>new RetsProperty
{
PropAttribute=item.First.ToObject(),
ImgUrls=item.Last.ToObject()
})
.ToList();

这个json应该是
retsprroperty
的列表吗?在我看来,json的格式似乎不正确(看起来提供了一个2d对象数组)您有权访问json吗?将内部数组更改为objectNo,我没有任何访问权限。我是从一个服务调用中得到它的。你可能会遇到困难,然后基本上你有一个带有
PropertyAttributes
对象的2d数组和一个字符串数组,每个数组中有一个对象(
[[PropertyAttributes,[strings]],[PropertyAttributes,[strings]]
),这可能仍然可行,这并不像获得一个单一的
retsprroperty
列表那么容易。这个json应该是
retsprroperty
列表吗?在我看来,json的格式似乎不正确(看起来提供了一个2d对象数组)。您有权访问json吗?将内部数组更改为objectNo,我没有任何访问权限。我是从一个服务调用中得到它的。你可能会遇到困难,然后基本上你有一个带有
PropertyAttributes
对象的2d数组和一个字符串数组,每个数组中有一个对象(
[[PropertyAttributes,[strings]],[PropertyAttributes,[strings]]
),这可能仍然可行,这并不像获得一个
RetsProperty