Articles of json.net

JSON.NET反序列化属性名称转换为具有自定义ContractResolver的ExpandoObject

我有这个JSON: {“firstName”: “John”,”lastName”: “Doe”} 这个JSON.NET合同解析器: public class CustomContractResolver : DefaultContractResolver{ protected override string ResolvePropertyName(string propertyName) { return propertyName.Replace(“_”,””); } } 我有这个WebApi Controller方法,使用expando来使用提供的字段部分更新db行: public virtual int Post(int id, JObject content) { var obj = JsonConvert.DeserializeObject(content.ToString(), new JsonSerializerSettings { ContractResolver = new CustomContractResolver() }); db.Update(id, obj) } 我希望反序列化的expando具有属性first_name和last_name以匹配我的模型/ db列名,但是它的属性仍然匹配JSON。 直接反序列化为Person有first_name和last_name有效,正如LB帮助我在下面发现的那样,但是我的db层需要一个Expando来进行部分记录更新,否则它会吹掉没有被json指定的Person任何属性,因此返回null在模型中。 我可以在ContractResolver中做什么来转换Expando的属性?

如何使用JSON.Net读取JSON并输出HTML?

如何使用JSON.Net并循环使用以下JSON为“photos”对象的每个成员输出一个HTML图像标记(字符串)? 我的目标是阅读以下JSON并输出以下字符串: “” JSON存储在外部文件“photos.json”中 { “photos”: { “photo1”: { “src”: “https://stackoverflow.com/images/foo.jpg”, “alt”: “Hello World!” }, “photo2”: { “src”: “https://stackoverflow.com/images/bar.jpg”, “alt”: “Another Photo” } } } 我开始使用类似于此处所示的代码: http : //www.hanselman.com/blog/NuGetPackageOfTheWeek4DeserializingJSONWithJsonNET.aspx var client = new WebClient(); client.Headers.Add(“User-Agent”, “Nobody”); var response = client.DownloadString(new Uri(“http://www.example.com/photos.json”)); JObject o = JObject.Parse(response);’ //Now o is an object I can walk around… 但是,我没有找到一种方法来“走动o”,如示例所示。 […]

C#:从JSON结构中提取/检索子节点

我们如何从C#中的JSON结构中提取或检索子节点值。 我的应用程序正在使用OpenWeatherMap ,我需要从city检索名称 , temp从列表和天气节点的描述 ,我的JSON和Class结构如下 { “cod”: “200”, “message”: 0.0284, “city”: { “id”: 2643743, “name”: “London”, “coord”: { “lon”: -0.12574, “lat”: 51.50853 }, “country”: “GB”, “population”: 0, “sys”: { “population”: 0 } }, “cnt”: 1, “list”: [ { “dt”: 1429268400, “temp”: { “day”: 12.21, “min”: 4.86, “max”: 13.18, “night”: 4.86, “eve”: 11.76, “morn”: 12.21 […]

如何区分Json.Net中未提供的空值和值?

使用Json.net反序列化是否有一种方法可以区分空值和未提供的值,即缺少密钥? 我正在考虑使用PATCH请求进行部分对象更新,它们代表不同的意图: Null – >将此属性设置为null 缺少 – >未提供跳过属性 在javascript中,这是undefined和null之间的区别。 我现在提出的最好的方法是使用JObject 。

如何使用json.net设置json路径的值

我试图在JSON结构中设置一个任意路径,我很难搞清楚如何做一个简单的设定值… 我想要的是像SetValue(path,value)这样的方法,它像SelectToken一样运行,但如果它不存在则创建路径并设置值。 public void SetPreference(string username, string path, string value) { var prefs = GetPreferences(username); var jprefs = JObject.Parse(prefs ?? @”{}”); var token = jprefs.SelectToken(path); if (token != null) { // how to set the value of the path? } else // how to add the path and value, example {“global.defaults.sort”: { “true” }} } […]

如何在C#中过滤JSON数组

我花了很多时间为我的问题找到解决方案。 在这个例子中,我在SetNavRecords数组中有2条记录。 第一个是“Artikelnummer”:“21700” ,第二个是“Artikelnummer”:“21701” 每条记录都有一个数组“OfflineVerkaufspreis”。 对我来说重要的是“OfflineVerkaufspreis”中的“Location_Code”字段我只需要一个已过滤的位置代码的孔信息。 如何选择一个位置代码的数据,例如“MH”? 我正在使用C#和Newtonsoft类进行JSON解析。 我用LINQ尝试了一些版本但没有成功。 { “SetNavRecords” : [ { “Artikelbeschreibung” : “Trikot \”Home\” 2012/2013″, “Artikelbeschreibung2” : “weiß”, “Artikelnummer” : “21700”, “Artikelrabattgruppe” : “MERCH”, “Gutschein” : false, “MwStProduktgruppe” : “VOLLNEU”, “OfflineVerkaufspreis” : [ { “Allow_Line_Discount” : true, “Date” : “2014-05-16T00:00:00”, “Item_No” : “21700”, “Location_Code” : “BP”, “Unit_Price” : 5.0 }, { […]

Json.net:序列化/反序列化不适用于具有循环引用的ISerializable对象

一段时间后我报告了一个问题 ,我在Json.net 4.5 R11中得到了修复。 如果我的循环引用属性Manager为NULL,则序列化和反序列化工作正常。 但是当循环引用属性Manager设置为NON NULL值时,它会在序列化字符串中被忽略,因此它会在反序列化中引发exception。 Json.net问题基础说问题在你的代码中,但我无法弄清楚。 有人可以帮我吗? 问题: 下面的代码有什么问题吗? 如果是,我应该怎么做才能解决问题? 如果没有,那么在Json.net代码中应该做些什么来解决这个问题呢? 一些更新 :在当前使用二进制序列化的遗留应用程序中需要这样做。 由于更改很大,因此使用Json序列化标记标记序列化中涉及的所有私有字段的工作量太大。 由于Json.net可以对ISerializable对象进行序列化,我们希望这样做。 如果没有循环引用对象,则此方法有效。 我的课程 [Serializable] class Department : ISerializable { public Employee Manager { get; set; } public string Name { get; set; } public Department() { } public Department( SerializationInfo info, StreamingContext context ) { Manager = ( Employee […]

Json.NET – 直接从流反序列化为动态?

在Json.NET文档中的性能提示的帮助下,我整理了一个从远程资源下载/反序列化JSON的方法: public async Task GetJsonAsync(string url) { using (var stream = await new HttpClient().GetStreamAsync(url)) { using (var sr = new StreamReader(stream)) { using (var jr = new JsonTextReader(sr)) { return new JsonSerializer().Deserialize(jr); } } } } 我想要一个返回dynamic的非generics版本。 用GetJsonAsync(url)调用上面的方法是有效的,直到你尝试访问结果的动态属性,此时我得到: ‘Newtonsoft.Json.Linq.JObject’ does not contain a definition for ‘[MyProperty]’ 我已经看到如何从字符串反序列化为动态 ,但是还没有看到直接从流中执行它的工作示例,这将是更好的,因为它更有内存效率。 这可能吗?

在实现IEnumerable的类上序列化自定义属性

目前,JSON.NET忽略了实现IEnumerable的类的所有其他属性并序列化了数组。 如何告诉JSON.NET序列化自定义属性? 我正在尝试序列化下面的PagedList实现: public interface IPagedList : IEnumerable { int PageIndex { get; } int PageSize { get; } int TotalCount { get; } int TotalPages { get; } bool HasPreviousPage { get; } bool HasNextPage { get; } } public interface IPagedList : IPagedList, IList { } /// /// A tried and tested PagedList […]

JObject嵌套属性

我试图用JObject创建一个这样的json对象: { “input”: { “webpage/url”: “http://google.com/” } } 我可以添加以下属性: JObject job = new JObject( new JProperty(“website/url”, “http://www.google.com”) ); 但是每次我尝试将一个对象嵌套在另一个对象中,这样我就可以让父“输入”它抛出一个exception。 如何使用JObject创建嵌套属性?