这是我第一次尝试 WCF/JSON。我创建了一个 WCF Web 服务。这是我的方法之一。这就是我将数据序列化为 JSON 的方式。
public string GetPrayers()
{
DataTable myDt = new DataTable();
myDt = sprocToDT("LoadPrayers");
string JSONString = string.Empty;
JSONString = JsonConvert.SerializeObject(myDt, Formatting.None);
return JSONString;
}
这会返回一个不错的 JSON 数据集:
{"GetPrayersResult":"[{\"prayerid\":2,\"prayer\":\"Please pray for my dog Rusty. He has cancer :(\",\"prayerCategory\":\"General\",\"prayerDate\":\"2017-06-10T21:24:16.1\",\"handle\":\"GuruJee\",\"country\":\"USA\"},{\"prayerid\":1,\"prayer\":\"Help Me I need a appendectomy STAT\",\"prayerCategory\":\"Sports\",\"prayerDate\":\"2017-04-10T20:30:39.77\",\"handle\":\"GuruJee\",\"country\":\"USA\"}]"}
当我去反序列化它时,我得到所有空值。这是我创建的类:
public class PrayUpPrayers
{
public string prayer { get; set; }
public string prayerid { get; set; }
public string prayerCategory { get; set; }
public string prayerCategoryID { get; set; }
public string prayerDate { get; set; }
public string handle { get; set; }
public string country { get; set; }
}
public class ThePrayer
{
public PrayUpPrayers prayers { get; set; }
}
}
这就是我检索 JSON 的方式:
void getData()
{
var request = HttpWebRequest.Create(string.Format(@"URLGoesHere"));
request.ContentType = "application/json";
request.Method = "GET";
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
if (response.StatusCode != HttpStatusCode.OK)
Console.Out.WriteLine("Error fetching data. Server returned status code: {0}", response.StatusCode);
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
var content = reader.ReadToEnd();
string foo = content.ToString();
var testing = JsonConvert.DeserializeObject<prayupapp.ModelClasses.PrayUpPrayers>(foo,
new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
});
测试总是为空?我序列化它的问题是错误的,可能是类结构,或者与我反序列化它的方式有关。一个重要的注意事项:我在这些 JSONClassesFromC# 站点之一上检查了我的 JSON,它仅返回 GetPrayersResult 作为唯一的类项。完全忽略我的整个结构。
最佳答案
您没有提供 sprocToDT
的代码,但它应该创建 ThePrayer
对象,其中应包含 PrayUpPrayers
列表
public class ThePrayer
{
public List<PrayUpPrayers> prayers { get; set; }
}
然后您应该反序列化 ThePrayer
对象,而不是 PrayUpPrayers
。
例如
PrayUpPrayers prayUpPrayers1 = new PrayUpPrayers
{
prayer = "Please pray for my dog Rusty. He has cancer",
prayerid = "2",
prayerCategory = "General",
prayerDate = "2017-06-10T21:24:16.1",
handle = "GuruJee",
country = "USA"
};
PrayUpPrayers prayUpPrayers2 = new PrayUpPrayers
{
prayer = "Help Me I need a appendectomy STAT",
prayerid = "1",
prayerCategory = "Sports",
prayerDate = "2017-04-10T20:30:39.77",
handle = "GuruJee",
country = "USA"
};
ThePrayer thePrayer = new ThePrayer
{
prayers = new List<PrayUpPrayers>
{
prayUpPrayers1, prayUpPrayers2
}
};
您代码中的 myDt
应该与我代码中的 thePrayer
实例相同。
JSONString = JsonConvert.SerializeObject(myDt, Formatting.None);
将提供看起来像这样的 Json
"{\"prayers\":[{\"prayer\":\"Please pray for my dog Rusty. He has cancer\",\"prayerid\":\"2\",\"prayerCategory\":\"General\",\"prayerCategoryID\":null,\"prayerDate\":\"2017-06-10T21:24:16.1\",\"handle\":\"GuruJee\",\"country\":\"USA\"},{\"prayer\":\"Help Me I need a appendectomy STAT\",\"prayerid\":\"1\",\"prayerCategory\":\"Sports\",\"prayerCategoryID\":null,\"prayerDate\":\"2017-04-10T20:30:39.77\",\"handle\":\"GuruJee\",\"country\":\"USA\"}]}"
反序列化看起来像
var testing = JsonConvert.DeserializeObject<prayupapp.ModelClasses.ThePrayer>(foo,
new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
});
关于c# - JSON 不反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44480635/