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到泛型转换错误。