有一个json字符串响应,我需要在C#中反序列化。 问题是,其中一个json属性称为“ contentHash”,并且可以具有如下所示的值:“ contentHash”:“ HY $ RF> L @ O-; G,2-&F7 $ TD#EH4 \ S )M [0L'DOHS \“`H'9 <”
这是一个问题,因为contentHas值有一个“”字符,看起来像valuestring的结尾,但不是。我不需要使用contentHash属性,因此有一种排除是从反序列化contentHash属性还是忽略属性值内的“字符”?
答案 0 :(得分:0)
我想您正在调用API以获取json有效负载。我不知道您是否可以控制该API,但是无论如何,下面的内容仍然适用。
调用API时,基本上是在与您约定了某些约定的远程资源进行通信。 API声明向您发送具有特定形状的json响应,这一事实是您(API使用者)与API作者之间达成协议的一部分。这意味着,如果API作者已证明他能够向您发送具有特定形状的json负载,那么您需要信任他并假设他在您调用API时会向您发送这种响应。>
编写用于使用API的代码时,请记住发送一个值为Accept
的{{1}}请求标头(这在API能够提供不同格式的响应(例如json)时非常有用和xml,并支持所谓的content negotiation)。
获得响应时,请检查application/json
响应标头,并检查响应媒体类型是否实际为Content-Type
。如果不是这样,则需要找到一种方法来处理这种意外情况。您可以决定抛出一个异常,例如,因为您遇到了意外情况,并且可能在应用程序域中没有业务规则可以处理该异常(您期望使用json并且获得了xml等。)您可能会做呢-可能没有比抛出异常更好的方法了,因为您所面对的情况完全是意外的。)
让我们假设您获得了application/json
响应内容。然后,您可以反序列化它以便在应用程序中使用它。 请勿手动。有几个库可以做到这一点。在.NET空间中,一种广泛采用的方法是newtonsoft json。让该库反序列化从API获得的json。如果您得到的字符串不是不是有效的json,则该库可能会抛出异常:这是正确的做法,再次说明了与上述响应内容类型相同的推理。
如果API返回无效的json字符串,则不必担心自己的代码会对其进行修复,以使其成为有效的json。这意味着API作者正试图欺骗您,他在我回复之初并未遵守以上引用的协议。您应该让他知道他有一个错误,因为他没有发送有效的json并且应该修复它。这可能表明他没有使用适当的库将其对象序列化为json。
如果您需要验证字符串以检查其是否为有效的json,请使用json lint之类的在线服务。
长话短说:固定响应内容以使其成为有效的json是不与要使用该API的代码有关的。 这是API作者的担忧。