我正尝试使用Grid App模板将数据构build到Windows 8.1应用程序中。 我跟着SampleDataSource.cs和SampleData.json模式,我修改它以适应我的应用程序应该有的数据和项目。 有一个GetMediaDataAsync方法,其代码如下,我得到一些错误。
private async Task GetMediaDataAsync() { // throw new NotImplementedException(); if (this._groups.Count != 0) return; Uri dataUri = new Uri("ms-appx:///DataModel/MediaData.json"); StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(dataUri); string jsonText = await FileIO.ReadTextAsync(file); JsonObject jsonObject = JsonObject.Parse(jsonText); JsonArray jsonArray = jsonObject["Groups"].GetArray(); foreach (JsonValue groupValue in jsonArray) { JsonObject groupObject = groupValue.GetObject(); MediaDataGroup group = new MediaDataGroup(groupObject["UniqueId"].GetString(), groupObject["Title"].GetString(), groupObject["ShortTitle"].GetString(), groupObject["ImagePath"].GetString(), groupObject["Description"].GetString()); foreach (JsonValue itemValue in groupObject["Items"].GetArray()) { JsonObject itemObject = itemValue.GetObject(); group.Items.Add(new MediaDataItem(itemObject["UniqueId"].GetString(), itemObject["Title"].GetString(), itemObject["Subtitle"].GetString(), itemObject["BackgroundImage"].GetString(), itemObject["TitleImage"].GetString(), itemObject["Duration"].GetNumber(), itemObject["Author"].GetString(), itemObject["ReleaseDate"].GetString(), itemObject["Description"].GetString(), itemObject["Format"].GetString(), itemObject["PurchaseLink"].GetString())); } this.Groups.Add(group); } }
出现错误的行是:
itemsObject["ReleaseDate"].GetString();
说不能将string转换为date时间
itemsObject["Duration"].GetNumber()
表示无法将Double转换为int
itemsObject["PurchaseLink"].GetString()
表示无法将string转换为Uri
有人可以帮助我以正确的方式做到这一点,所以我不会得到这些错误。
您将string
作为所有字段,但是您应该将它们转换为适当的类型:
Convert.ToDateTime(itemObject["ReleaseDate"]) Convert.ToInt32(itemObject["Duration"].GetNumber()) new Uri(itemObject["PurchaseLink"].GetString())
要将字符串转换为DateTime
,可以解析它,例如:
DateTime.ParseExact(itemsObject["ReleaseDate"].GetString(), "yyyy-MM-dd", CultureInfo.InvariantCulture)
JSON中的一个数字总是一个double
,所以要把它作为一个int
,
(int)(itemsObject["Duration"].GetNumber())
要从字符串中创建一个Uri
对象,可以使用它的构造函数:
new Uri(itemsObject["PurchaseLink"].GetString())
如果你有Json对象的字符串内容,你可以使用任何Json库将它转换为你的定义类型,我建议你使用Newton.Json
Examle
JSON:
{"Name":"MyName","Family":[{"Name":"MyBro Name","Rel":"Brother"}],"Age":15}
C#类型:
class FamilyMember{ public string Name{get;set;} public string Rel{get;set;} } class Person{ public string Name{get;set;} public int Age{get;set;} public FamilyMember [] Family{get;set;} }
这里是用法示例
var person = JsonConvert.DeserializeObject<Person>(json); var name = person.Name; var age= person.Age;