C# 使用LINQ解析JSON

C# 使用LINQ解析JSON,c#,json,linq,windows-phone-8,C#,Json,Linq,Windows Phone 8,你好,我面临一个非常简单的问题,但它没有得到解决。这是我的课堂设计 public class Program { public string ProgramName { get; set; } public string ProgramTime { get; set; } public string ProgramDetails { get; set; } } public class Listing { public string ChannelName {

你好,我面临一个非常简单的问题,但它没有得到解决。这是我的课堂设计

public class Program
{
    public string ProgramName { get; set; }
    public string ProgramTime { get; set; }
    public string ProgramDetails { get; set; }
}

public class Listing
{
    public string ChannelName { get; set; }
    public string NowShowing { get; set; }
    public string NowShowingTime { get; set; }
    public string NowShowingDescription { get; set; }
    public string NowShowingPicture { get; set; }
    public List<Program> Programs { get; set; }
}

public class RootObject
{
    public string status { get; set; }
    public string about { get; set; }
    public List<Listing> listings { get; set; }
}
帮我解决我的蹩脚方法。我关心的是正确解析项目,以及如何将它们添加到嵌套列表“程序”。第二个更为关键

示例Json输入-

   {
      "listings": [
      {
          "ChannelName": "NTV BANGLA",
          "NowShowing": "Ei Shomoy (R)",
          "NowShowingTime": "12:10",
          "NowShowingDescription": "Ei Shomoy is a daily talk show ........",
          "Programs": [
          {
              "ProgramName": "Ainer Chokhe (R)",
              "ProgramTime": "13:00",
              "ProgramDetails": "Human Rights and law based program Ainer Chokhe,"
          },
          {
              "ProgramName": "Shonkhobash",
              "ProgramTime": "15:10",
              "ProgramDetails": "Drama serial Shonkhobash, script by Bipasha Hayat and"
          }
        ]
      },
      {
          "ChannelName": "CHANNEL i",
          "NowShowing": "Taroka Kothon (Live)",
          "NowShowingTime": "12:30",
          "NowShowingDescription": "City Cell Taroka Kothon Live is a talk show ",
          "Programs": [
          {
               "ProgramName": "Channel i Top News",
               "ProgramTime": "13:00",
               "ProgramDetails": "Mutual Trust Bank top news (Shirsho Shongbad)"
       },
       {
               "ProgramName": "Ebong Cinemar Gaan",
               "ProgramTime": "13:10",
               "ProgramDetails": "Ebong Cinemar Gaan, a musical show based on "
        }
 ]
         }
      ]
   }
EDIT1

var customers = JsonConvert.DeserializeObject<RootObject>(e.Result);
Listing ls = new Listing
{
       ChannelName = customers.listings.First().ChannelName,
       NowShowing=customers.listings.First().NowShowing,
       Programs=??
};
var customers=JsonConvert.DeserializeObject(e.Result);
清单ls=新清单
{
ChannelName=customers.listings.First().ChannelName,
NowShowing=customers.listings.First().NowShowing,
程序=??
};

使用DataContractJsonSerializer在windows phone中解析json字符串

MemoryStream memoryStream = new MemoryStream(Encoding.Unicode.GetBytes(e.Result));

DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(List<RootObject>));
RootObject itemDataList = dataContractJsonSerializer.ReadObject(memoryStream) as RootObject;

ChannelName = itemDataList.listings.First().ChannelName;
MemoryStream MemoryStream=newmemoryStream(Encoding.Unicode.GetBytes(e.Result));
DataContractJsonSerializer DataContractJsonSerializer=新的DataContractJsonSerializer(类型(列表));
RootObject itemDataList=dataContractJsonSerializer.ReadObject(memoryStream)作为RootObject;
ChannelName=itemDataList.listings.First().ChannelName;

如果
e.Result
是带有JSON的字符串,请尝试以下操作

var jss = new JavaScriptSerializer();
var o = jss.Deserialize<RootObject>(e.Result);
var jss=new JavaScriptSerializer();
var o=jss.反序列化(e.Result);
更新
也许你需要这样的东西

var customers = JsonConvert.DeserializeObject<RootObject>(e.Result);
Listing ls = new Listing
{
    ChannelName = customers.listings.First().ChannelName,
    NowShowing=customers.listings.First().NowShowing,
    Programs=customers.listings.First().Programs
};
var customers=JsonConvert.DeserializeObject(e.Result);
清单ls=新清单
{
ChannelName=customers.listings.First().ChannelName,
NowShowing=customers.listings.First().NowShowing,
Programs=customers.listings.First().Programs
};
更新2
如果你想在现有的基础上,你可以尝试这样做

var customers = JsonConvert.DeserializeObject<RootObject>(e.Result);
Listing ls = new Listing
{
    ChannelName = customers.listings.First().ChannelName,
    NowShowing=customers.listings.First().NowShowing,
    Programs=customers.listings.First().Programs.Select(p=>new Program{
                                        ProgramName=p.ProgramName,
                                        ProgramTime=p.ProgramTime, 
                                        ProgramDetails = p.ProgramDetails
                                       }).ToList()
};
var customers = JsonConvert.DeserializeObject<RootObject>(e.Result);
Listing ls = new Listing
{
    ChannelName = customers.listings.First().ChannelName,
    NowShowing=customers.listings.First().NowShowing,
    Programs=Enumerable.Range(1,10).Select(p=>new Program{
                                        ProgramName="generated name",
                                        ProgramTime="generated time", 
                                        ProgramDetails = "generated details"
                                       }).ToList()
};
var customers=JsonConvert.DeserializeObject(e.Result);
清单ls=新清单
{
ChannelName=customers.listings.First().ChannelName,
NowShowing=customers.listings.First().NowShowing,
Programs=customers.listings.First().Programs.Select(p=>newprogram{
ProgramName=p.ProgramName,
编程时间=p.ProgramTime,
ProgramDetails=p.ProgramDetails
})托利斯先生()
};
更新3
或者,如果你不是随机的,你可以试试这样的东西

var customers = JsonConvert.DeserializeObject<RootObject>(e.Result);
Listing ls = new Listing
{
    ChannelName = customers.listings.First().ChannelName,
    NowShowing=customers.listings.First().NowShowing,
    Programs=customers.listings.First().Programs.Select(p=>new Program{
                                        ProgramName=p.ProgramName,
                                        ProgramTime=p.ProgramTime, 
                                        ProgramDetails = p.ProgramDetails
                                       }).ToList()
};
var customers = JsonConvert.DeserializeObject<RootObject>(e.Result);
Listing ls = new Listing
{
    ChannelName = customers.listings.First().ChannelName,
    NowShowing=customers.listings.First().NowShowing,
    Programs=Enumerable.Range(1,10).Select(p=>new Program{
                                        ProgramName="generated name",
                                        ProgramTime="generated time", 
                                        ProgramDetails = "generated details"
                                       }).ToList()
};
var customers=JsonConvert.DeserializeObject(e.Result);
清单ls=新清单
{
ChannelName=customers.listings.First().ChannelName,
NowShowing=customers.listings.First().NowShowing,
程序=可枚举。范围(1,10)。选择(p=>newprogram{
ProgramName=“生成的名称”,
ProgramTime=“生成时间”,
ProgramDetails=“生成的详细信息”
})托利斯先生()
};

您必须迭代嵌套数组来创建
程序。
您可以提供样本json进行输入吗?您的解析代码没有运行时错误吗?您可以为json输入提供样本预期输出吗?这是说Path中的非法字符不幸的是,itemdatalist仍然为空。我遗漏了什么吗?我在我的ans中进行了编辑。请检查并让我知道它是否作为JObject工作JObject json=JsonConvert.DeserializeObject(e.Result);我从这里获取json数据。问题在于解析和迭代。很抱歉,我无法正确表达我自己,我手中有数据,我想将它们分配给正确的属性以供以后使用。我如何填充ChannelName、NowShowing和最重要的嵌套数组程序?我不太明白你的意思,在
o
中,您已反序列化了具有字段属性的对象,包括
列表
列表
,因此您可以简单地获取它并进行更改,您可以提供示例您具体的意思吗?我已经解决了问题的第一部分(我将在回答中详细说明)。请告诉我如何在“程序”中插入数据?我遇到了麻烦,因为它是一个列表,而不是像“ChannelName”或“nowshiving”这样的属性。这是一个正确的方法。但是我也需要“ProgramName”、“ProgramTime”、“ProgramDetails”中的值。有一些铸造问题。已引发IEnumerable到泛型转换错误。