Tag: json.net

使用Json.NET使用数组数组反序列化json字符串

string json = @”{ ‘symbol’:’XX’, ‘column_names”:[“Date”,”Open”,”High”,”Low”,”Close”,”Volume”], ‘data’:[ [‘2014-01-02’,25.78,25.82,25.47,25.79,31843697.0], [‘2013-12-31’,25.81,26.04,25.77,25.96,22809682.0]]}”; public class DailyData { public string symbol { get; set; } public List data { get; set; } } public class OneDay { public DateTime date { get; set; } public double open { get; set; } public double high { get; set; } public double […]

json.NET解析twitter API数据的问题

我已经在项目中成功使用json.NET一段时间没有任何问题。 昨晚我遇到了第一个案例,其中json.NET崩溃试图解析从应该是可靠来源返回的json数据:twitter API。 具体来说,此代码导致错误: string sCmdStr = String.Format(“https://api.twitter.com/1/users/lookup.json?screen_name={0}”, sParam); string strJson = _oauth.APIWebRequest(“GET”, sCmdStr, null); JObject jsonDat = JObject.Parse(strJson); 在我的例子中,sParam字符串包含大约25个twitter数字ID。 twitter API调用成功,但json.NET Parse调用失败,出现以下错误: “从JsonReader读取JObject时出错。当前JsonReader项不是对象:StartArray” 有没有其他人遇到这个? 有谁知道它周围的任何方式? 直到我解决它,我才停下来。

使用Json.net反序列化时处理额外的成员

假设我想将一组Json数据反序列化为Person对象。 class Person { [DataMember] string name; [DataMember] int age; [DataMember] int height; object unused; } 但是,如果我有如下所示的Json数据: { “name”:”Chris”, “age”:100, “birthplace”:”UK”, “height”:170, “birthdate”:”08/08/1913″, } “birthdate”和“birthplace”字段不属于Person类。 但是我仍然希望保留这些字段,那么是否可以使用Json.net或其他可以将这些额外字段存储到Person字段之一的库,例如上面声明的“unused”?

如何为某个特定类型而不是全局设置Json.NET ContractSerializer?

我想在我的ASP.NET Web API应用程序中为某些类型设置一个契约序列化程序。 我可以在App_Start / FormatterConfig.cs中全局设置设置,如下所示: public static void RegisterGlobalFormatters(MediaTypeFormatterCollection formatters) { jsonSerializerSettings.ContractResolver = new CriteriaContractResolver(new List(new string[]{“mdData”, “name”, “label”})); … 但是我怎样才能将它应用于一个或多个特定的类类型? 我想这样做的原因是因为我需要能够根据Web服务的配置或参数设置在运行时应该序列化哪些字段,类似于这些示例: 使用JSON.net,在基类上下文中使用时,如何防止派生类的属性序列化? http://json.codeplex.com/discussions/347610

使用json.NET将JSON反序列化为C#dynamic

我有以下问题:我有一个看起来像这样的json文件 { “Path”: { “FirstPath”: “/1/2/text()” } } 如果我像这样用Newtonsoft解析这个JSON-File dynamic dyn = JObject.Parse(json); 或这个 dynamic dyn = JsonConvert.DeserializeObject(json); 我得到一个需要像这样使用的动态对象 dyn.Path.FirstPath.Value 我如何摆脱价值的东西? JSON中的所有对象最终都是一个字符串。 如果没有必要,我不想总是在末尾写“.Value”。

无法加载文件或程序集“Newtonsoft.Json”或其依赖项之一

首先,它不仅仅是重复。 以下问题的答案都不适用于我。 http://goo.gl/tS40cn http://goo.gl/pH6v2T 我刚刚使用Nuget Package Manager更新了所有软件包,我开始收到此错误。 无法加载文件或程序集“Newtonsoft.Json,Version = 6.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed”或其中一个依赖项。 定位的程序集的清单定义与程序集引用不匹配。 (HRESULTexception:0x80131040) 我的包裹配置有: Web.config包含这段代码: 来自Reference for Newtonsoft.Json属性 根据类似问题的答案,我尝试过以下几点: 使用Update-Package –reinstall Newtonsoft.Json重新安装软件包 从Web.config为Newtonsoft.Json删除dependentAssembly配置 在dependentAssembly newVersion更改为6.0.0.0和newVersion 。 这样做会产生新的错误。 还尝试了Get-Project -All | Add-BindingRedirect Get-Project -All | Add-BindingRedirect 。 它将Newtonsoft.Json的4.5.0.0更改为4.5.0.0 。 但问题仍未得到解决。 请帮我解决这个问题。

将XML转换为JSON到XML时保持json:Array属性

我有一块看起来像的XML Alan http://www.google.com Admin 当我尝试将它序列化为json string json = JsonConvert.SerializeXmlNode(xml); 它忽略了名称空间 { “person”: { “@id”: “1”, “name”: “Alan”, “url”: “http://www.google.com”, “role”: [ “Admin” ] } } 当我将它反序列化回xml XmlDocument xml = JsonConvert.DeserializeXmlNode(json) ,我得到以下内容: Alan http://www.google.com Admin 如何保留json:Array属性?

自定义Json.NET合约解析器,用于将小写下划线转换为CamelCase

我正在使用ASP.NET MVC中的REST API,其中生成的序列化JSON使用lowercase_underscore作为属性。 从具有字符串属性FirstName和Surname Person类中,我得到如下JSON: { first_name: “Charlie”, surname: “Brown” } 请注意lowercase_underscore名称。 我用来为我自动执行此转换的合同解析程序是: public class JsonLowerCaseUnderscoreContractResolver : DefaultContractResolver { private Regex regex = new Regex(“(?!(^[AZ]))([AZ])”); protected override string ResolvePropertyName(string propertyName) { return regex.Replace(propertyName, “_$2”).ToLower(); } } 这一切都很好,但我不知道如何用Json.NET实现反向。 因此,例如,我可以如下声明API方法,并且它知道将请求正文中的传入JSON转换为适当的对象: public object Put(int id, [FromBody] Person person)

Json.NET – CustomCreationConverter中单个属性的默认反序列化行为

在下面的场景中,当遇到我反序列化的类型中存在的JSON属性时,如何让CrazyItemConverter像往常一样继续? 我有一些看起来像这样的JSON: { “Item”:{ “Name”:”Apple”, “Id”:null, “Size”:5, “Quality”:2 } } JSON被反序列化为一个看起来像这样的类: [JsonConverter(typeof(CrazyItemConverter))] public class Item { [JsonConverter(typeof(CrazyStringConverter))] public string Name { get; set; } public Guid? Id { get; set; } [JsonIgnore] public Dictionary CustomFields { get { if (_customFields == null) _customFields = new Dictionary(); return _customFields; } } … } CrazyItemConverter填充已知属性的值,并将未知属性放在CustomFields中。 其中的ReadJson看起来像这样: public […]

Json.NET – 阻止重新序列化已经序列化的属性

在ASP.NET Web API应用程序中,我正在使用的一些模型包含一大块ad-hoc JSON,仅在客户端有用。 在服务器上,它只是作为字符串进出关系数据库。 性能是关键,根本不需要处理JSON字符串服务器端。 所以在C#中,想象一个像这样的对象: new Person { FirstName = “John”, LastName = “Smith”, Json = “{ \”Age\”: 30 }” }; 默认情况下,Json.NET会像这样序列化这个对象: { “FirstName”: “John”, “LastName”: “Smith”, “Json”: “{ \”Age\”: 30 }” } 我希望能够指示Json.NET假设Json属性已经是序列化表示,因此它不应该重新序列化,并且生成的JSON应该如下所示: { “FirstName”: “John”, “LastName”: “Smith”, “Json”: { “Age”: 30 } } 理想情况下,这适用于两个方向,即在POST JSON表示时,它将自动反序列化为上面的C#表示。 使用Json.NET实现这一目标的最佳机制是什么? 我需要自定义JsonConverter吗? 是否有一个更简单的基于属性的机制? 效率很重要; 重点是跳过序列化开销,这可能是一个微优化,但为了论证,让我们假设它不是。 (可能会返回包含大量Json属性的大列表。)