我尝试使用Grid App模板将数据构建到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();
表示无法将字符串转换为日期时间
itemsObject["Duration"].GetNumber()
表示无法将Double转换为int
itemsObject["PurchaseLink"].GetString()
表示无法将字符串转换为Uri
有人可以用正确的方式帮助我,这样我就不会犯这些错误。
答案 0 :(得分:1)
您将所有字段都设为string
,但您应将其转换为适当的类型:
Convert.ToDateTime(itemObject["ReleaseDate"])
Convert.ToInt32(itemObject["Duration"].GetNumber())
new Uri(itemObject["PurchaseLink"].GetString())
答案 1 :(得分:1)
要将字符串转换为DateTime
,您可以解析它,例如:
DateTime.ParseExact(itemsObject["ReleaseDate"].GetString(), "yyyy-MM-dd", CultureInfo.InvariantCulture)
JSON中的数字始终为double
,因此要将其设为int
,您只需将其投射:
(int)(itemsObject["Duration"].GetNumber())
要从字符串创建Uri
对象,请使用其构造函数:
new Uri(itemsObject["PurchaseLink"].GetString())
答案 2 :(得分:0)
如果您有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;