Tag: 反序列化

Json.NET:使用对象列表进行反序列化

我正在从Windows Phone 7客户端上的服务处理JSON响应(如下所示)。 我正在使用Json.NET将它们反序列化为一个包含产品列表的对象。 但在我反序列化之后,当我查看我的serviceresponse对象时,我可以看到2个产品的列表。 但是当我展开产品对象时,product(Name,ExpiryDate …等)下的字段都是null。 我想我的问题在于我定义了serviceresponse类的方式。 有人可以帮我解决问题并获得正确的输出。 我的反序列化代码: serviceresponse deserializedProduct = JsonConvert.DeserializeObject(json); 我的Json响应字符串: { “serviceresponse” : { “company” : “ford”, “success” : “Yes”, “products” : [ {“product” : { “Name”: “Product 1”, “ExpiryDate”: “\/Date(978048000000)\/”, “Price”: “99.95”, “Sizes”: “1” } }, {“product” : { “Name”: “Product 2”, “ExpiryDate”: “\/Date(1248998400000)\/”, “Price”: “12.50”, “Sizes”: “1” } […]

仅当数组为空时,JSON反序列化才会失败

在某些情况下,当我收到其中一个数组属性为空的JSON时,反序列化失败,抛出以下exception: 无法将当前JSON对象(例如{“name”:“value”})反序列化为类型’SonicApi.ClickMark []’,因为该类型需要JSON数组(例如[1,2,3])才能正确反序列化。 要修复此错误,请将JSON更改为JSON数组(例如[1,2,3])或更改反序列化类型,使其成为普通的.NET类型(例如,不是像整数这样的基本类型,而不是类似的集合类型可以从JSON对象反序列化的数组或List。 JsonObjectAttribute也可以添加到类型中以强制它从JSON对象反序列化。 路径auftakt_result.click_marks,第1行,第121位。 尝试使用以下代码忽略空值没有帮助: var jsonSerializerSettings = new JsonSerializerSettings(); jsonSerializerSettings.NullValueHandling = NullValueHandling.Ignore; 以下是产生错误的JSON示例: { “status”: { “code”: 200 }, “auftakt_result”: { “clicks_per_bar”: 0, “overall_tempo”: 0, “overall_tempo_straight”: 0, “click_marks”: {} } } 以下是JSON的示例,其数组不为空且不会产生任何错误: { “status”: { “code”: 200 }, “auftakt_result”: { “clicks_per_bar”: 8, “overall_tempo”: 144.886978, “overall_tempo_straight”: 144.90889, “click_marks”: [ { “index”: 0, “bpm”: […]

InvalidOperationException反序列化Atom XML

我正在使用这个C#代码来读取XML RSS提要并根据模型对其进行反序列化: List rssFeedItems = new List(); var url = @”http://mimijumi-dev.myshopify.com/blogs/news.atom”; string result; using (var httpClient = new HttpClient()) { var request = new HttpRequestMessage(HttpMethod.Get, url); var response = await httpClient.SendAsync(request); result = response.Content.ReadAsStringAsync().Result; } XmlDocument xdoc = new XmlDocument(); xdoc.LoadXml(result.ToString()); XmlNodeReader xreader = new XmlNodeReader(xdoc); XmlSerializer deserializer = new XmlSerializer(typeof(List)); rssFeedItems = (List)deserializer.Deserialize(xreader); 这是型号代码: […]

将Json反序列化为对象和子对象以进行返回

还不太熟悉JSON,并且遇到了一个对我来说不明显的问题。 我正在查询的api返回一个标准的响应对象,其中处理的命令/ api请求的结果嵌入在json中的数据对象中。 因此,对于API上的所有请求,响应如下所示,数据组件的变化取决于所请求的内容。 ObjectType1响应 { “data”: { “person” : { “id” : 21, “name” : “Json can be annoying at times” } }, “message” : “”, “result” : “success” } 或者关于api的其他请求将返回以下列表 ObjectType2响应 { “data”: { “1234” : { “id”: 1234, “title” : “Terminator” }, “3245” : { “id” : 3245, “name” : “Terminator 2” […]

在c#中反序列化json数组列表

我正在开发一个主要以C#作为后端的项目,但我不是一个经验丰富的C#开发人员,所以我无法找到热点来修复对象列表的json反序列化。 以下函数负责反序列化,但是我收到错误: using System.IO; using System.Web; using Raven.Imports.Newtonsoft.Json; namespace Corina.Web.Handlers { public class JsonRequestHandler { public T Handle(HttpContextBase context) { string requestData; context.Request.InputStream.Position = 0; using (var inputStream = new StreamReader(context.Request.InputStream)) { requestData = inputStream.ReadToEnd(); } return JsonConvert.DeserializeObject(requestData, new Raven.Imports.Newtonsoft.Json.Converters.StringEnumConverter()); } } } Error : 无法将当前JSON数组(例如[1,2,3])反序列化为类型“Corina.Web.Views.DocumentViewModel”,因为该类型需要JSON对象(例如{“name”:“value”})才能正确反序列化。 要修复此错误,请将JSON更改为JSON对象(例如{“name”:“value”})或将反序列化类型更改为数组或实现集合接口的类型(例如ICollection,IList),例如List从JSON数组反序列化。 JsonArrayAttribute也可以添加到类型中以强制它从JSON数组反序列化。 任何人都可以告诉我如何在对象列表而不是对象上进行反序列化?

如何使用嵌套的对象数组反序列化JSON数组

我有一个JSON字符串,如下所示,并希望反序列化它: [[{“campaignId”:201410018,”programCode”:”54321″}],[{“campaignId”:201410018,”programCode”:”54321″}]] 我创建了一些类,如下所示: public class Rootclass { public List rootClass { get; set; } } public class JSONResponse { public int campaignId { get; set; } public string programCode { get; set; } } 我正在调用此JSON.NET方法来反序列化JSON: List myDeserializedObjList = (List)Newtonsoft.Json.JsonConvert.DeserializeObject(json, typeof(List)); 但我收到以下错误: Cannot deserialize JSON array (ie [1,2,3]) into type ‘JSON_Test.Rootclass’. The deserialized type must be […]

反序列化GUID数组时的JSON.NETexception

我正在使用JSON.NET反序列化从浏览器发送的AJAX HTTP请求,并且遇到使用Guid []作为参数的Web服务调用的问题。 当我使用内置的.NET序列化程序时,这很好用。 首先,流中的原始字节如下所示: System.Text.Encoding.UTF8.GetString(rawBody); “{\”recipeIds\”:[\”d9ede305-d244-483b-a435-abcf350efdb2\”]}” 然后我打电话给: Newtonsoft.Json.JsonSerializer serializer = new Newtonsoft.Json.JsonSerializer(); parameters[0] = serializer.Deserialize(sr, operation.Messages[0].Body.Parts[0].Type); .Type是System.Guid[] 然后我得到了例外: Cannot deserialize the current JSON object (eg {“name”:”value”}) into type ‘System.Guid[]’ because the type requires a JSON array (eg [1,2,3]) to deserialize correctly. To fix this error either change the JSON to a JSON array (eg […]

处理在C#中包含不同类型的JSON字段

我必须阅读一个JSON文档,它有一个可以包含不同类型的字段。 例如,可以是long或整数数组。 我知道我需要使用自定义反序列化器,但不确定如何。 在下面的示例中,xx字段有时是long,否则是一个int数组。 任何有关如何处理此问题的帮助表示赞赏。 static void JsonTest() { const string json = @” { ‘Code’: ‘XYZ’, ‘Response’: { ‘Type’ : ‘S’, ‘Docs’: [ { ‘id’ : ‘test1’, ‘xx’ : 1 }, { ‘id’ : ‘test2’, ‘xx’ : [1, 2, 4, 8] }, ] } }”; A a; try { a = JsonConvert.DeserializeObject(json); } catch( […]

反序列化对象将所有值设置为空

我正在尝试将JSON反序列化为自定义对象,但我的所有属性都设置为null并且不确定发生了什么。 有人看错了吗? JSON示例 { “Keys”: [ { “RegistrationKey”: “asdfasdfa”, “ValidationStatus”: “Valid”, “ValidationDescription”: null, “Properties”: [ { “Key”: “Guid”, “Value”: “i0asd23165323sdfs68661358” } ] } ] } 这是我的代码,其中strResponseValid是上面的JSON。 Keys myDeserializedObjValid = (Keys)JsonConvert.DeserializeObject(strResponseValid, typeof(Keys)); validationStatusValid = myDeserializedObjValid.ValidationStatus; 这是我的课程 public class Keys { public string RegistrationKey { get; set; } public string ValidationStatus { get; set; } public string […]

如何在Web Api Post请求Json中检测重复键

当请求Json包含重复键时,我需要从ASP.NET Web API Post请求返回400错误。 例如,如果请求是 { “key1”: “value1”, “key2”: 1000, “key2”: 2000, “key3”: “value3” } 然后我想要抛出错误,因为有两个“key2”键。 我的控制器方法看起来像 [HttpPost] public IHttpActionResult PostMethod([FromBody]RequestModel request) { ….. } 和我的RequestModel模型一样 public class RequestModel { [Required] public string Key1 {get; set; } [Required] public int Key2 {get; set; } public string Key3 {get; set; } } 在上面的示例中,Json序列化程序似乎很乐意接受请求并使用2000填充Key2,或者密钥的最后一个实例。 我想我需要做一些涉及JsonSerializerSettings类的事情,或者实现一个自定义的JsonConverter,但我不确定如何继续。