C# 如何反序列化包含分隔JSON的JSON?

C# 如何反序列化包含分隔JSON的JSON?,c#,json.net,C#,Json.net,我在将Json字符串反序列化到对象时遇到问题 这是我从Web服务收到的json示例: { "GetDataResult": "{ \"id\":1234, \"cityname\":\"New York\", \"temperature\":300, }" } 我有一个类CityData,看起

我在将Json字符串反序列化到对象时遇到问题

这是我从Web服务收到的json示例:

{
    "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
或任何适当的类型即可。如果你不需要的话,就没有必要重新估价。