C# 如何反序列化包含分隔JSON的JSON?
我在将Json字符串反序列化到对象时遇到问题 这是我从Web服务收到的json示例:C# 如何反序列化包含分隔JSON的JSON?,c#,json.net,C#,Json.net,我在将Json字符串反序列化到对象时遇到问题 这是我从Web服务收到的json示例: { "GetDataResult": "{ \"id\":1234, \"cityname\":\"New York\", \"temperature\":300, }" } 我有一个类CityData,看起
{
"GetDataResult":
"{
\"id\":1234,
\"cityname\":\"New York\",
\"temperature\":300,
}"
}
我有一个类CityData,看起来像这样
[JsonObject("GetDataResult")]
public class CityData
{
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("cityname")]
public string CityName { get; set; }
[JsonProperty("temperature")]
public int Temperature { get; set; }
}
我尝试通过调用方法DeserializeObject来反序列化json
var cityData = JsonConvert.DeserializeObject<CityData>(response);
var cityData=JsonConvert.DeserializeObject(响应);
但根本因素似乎造成了问题
你们知道我该如何修复它,以便接收一个包含填充数据的CityData对象吗?json响应包含一个对象,该对象本身包含一个表示数据结果的json字符串
var response = JsonConvert.DeserializeObject<JObject>(responseStr);
var dataResult = (string)response["GetDataResult"];
var cityData = JsonConvert.DeserializeObject<CityData>(dataResult);
您需要反序列化两次,一次用于响应,另一次用于数据结果
var response = JsonConvert.DeserializeObject<JObject>(responseStr);
var dataResult = (string)response["GetDataResult"];
var cityData = JsonConvert.DeserializeObject<CityData>(dataResult);
var response=JsonConvert.DeserializeObject(responseStr);
var dataResult=(字符串)响应[“GetDataResult”];
var cityData=JsonConvert.DeserializeObject(dataResult);
什么是响应
?JSON中的GetDataResult
属性的值是一个字符串,因此它不会按您期望的方式反序列化为属性。web服务正在抛出错误的JSON。这在技术上是合法的,但显然不是你想要的。转义字符串引用在那里…这一切都很糟糕。很可能他使用的是WCF糟糕的JSON“包装”之类的东西。如果您编写自定义JsonConverter
并使用LINQ to JSON
,您可以避免两次反序列化。当然,然后您必须编写转换器。这将是最简单的修复方法,至少在他需要一个更健壮的解决方案之前是如此。我过去常串()instead@RomanGudkov,显然您的数据不是字符串,它可能已经是一个对象了。只需强制转换为JObject
或任何适当的类型即可。如果你不需要的话,就没有必要重新估价。