Tag: json.net

序列化时,子元素的Newtonsoft内联格式

是否可以使用newtonsoft json.net创建一个内联序列化子元素(Formatting.None)的属性? 我有一个非常庞大的数据集,我想保持它的可重复性。 一些子元素不是很重要,可以内联写入。 { “name”: “xxx”, “desc”: “xxx”, “subelem”: [ {“val1”: 1, “val2”: 2, …}, //inline, {“val1”: 1, “val2”: 2, …}, … ] “subelem2”: { “val1”: 1, “val2”: 2, … } } 我想强制我的模型的一些子对象的内联序列化。 在这种情况下,“subelem”项目将内联写入。 谢谢

将单个对象插入json文件而不重写整个文件

我正在研究一种方法,该方法使用JSON.NET将马对象添加到JSON格式的马数据库中。 一种选择是将整个文件反序列化为马匹列表,添加新马,然后序列化列表并重写整个文件。 我在下面的代码中实现了这种方法。 // adds a horse to the db public int AddHorse(Horse horse) { // identify and assign next available id to horse var horses = GetAllHorses(); int nextId = horses.Max(h => h.ID) + 1; horse.ID = nextId; // Add horse to list horses.Add(horse); // Write entire list to JSON file. Can I just […]

反序列化使用TypeNameHandling.All序列化的字符串

使用以下样本序列化了一个类 using Newtonsoft.Json; using System; namespace ConsoleAppCompare { class Program { static void Main(string[] args) { Movie movie = new Movie() { Name = “Avengers”, Language = “En”, Actors = new Character[] { new Character(){Name=”Phil Coulson”},new Character(){Name=”Tony Stark”} }}; Console.WriteLine(JsonConvert.SerializeObject(movie, Formatting.Indented, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All })); Console.ReadLine(); } } class Movie { public […]

使用JSON.NET反序列化字典

我正在使用版本4.0.8的Newtonsoft.Json并尝试将其与Web API一起使用。 所以我想用JST反序列化JSON JsonConvert.DeserializeObject(jsonString); 这有效,直到我将Dictionary作为属性添加到此类并想要反序列化它。 json字符串的forms为 { “Date”:null, “AString”:”message”, “Attributes”:[ {“Key”:”key1″,”Value”:”value1″}, {“Key”:”key2″,”Value”:”value2″} ], “Id”:0, “Description”:”… } 当反序列JsonSerializationException JsonSerializationException类型的exception时会JsonSerializationException以下消息:“ 无法将JSON数组反序列化为类型’System.Collections.Generic.Dictionary`2 [System.String,System.String]’。 ” 我在这做错了什么? UPDATE1:使用JSON.NET进行序列化时,我得到以下字典: Attributes”:{“key1″:”value1″,”key2″:”value2”} 似乎WebApi以不同于Json.Net的方式反序列化对象。 服务器端我使用以下行进行隐式反序列化: return new HttpResponseMessage(object); UPDATE2:作为一种解决方法,我现在来到了服务器端。 return new HttpResponseMessage(JsonConvert.SerializeObject(license).Base64Encode()); 我用Json.Net服务器端转换它并将其作为base64编码的字符串传输。 所以Json.Net可以反序化自己的格式。 但它仍然不是我想要的,那么还有什么进一步的建议吗?

反序列化json树结构和设置父项

这似乎是一个非常基本的问题,但我很想找到一个优雅的解决方案。 我有一个Node类,我用它来构建树结构。 然后使用JsonConvert.SerializeObject(..)将其序列化为JSON。 为了防止在序列化时循环引用,我在Parent属性上放置了一个JsonIgnore属性。 这显然意味着父级未被序列化为生成的JSON输出中的每个节点的一部分。 当我反序列化相同的JSON字符串时,我希望Node对象分配正确的Parent,以便我可以轻松地向上遍历树。 实现这一目标的最简洁最简单的方法是什么? [JsonObject] public class Node : IEnumerable { public Guid Id { get; set; } public string Name { get; set; } [JsonIgnore] public Node Parent { get; private set; } [JsonProperty(“Children”)] private readonly Dictionary _children = new Dictionary(); public Node() { Id = Guid.NewGuid(); } public void Add(Node […]

ASP MVC 5和Json.NET:动作返回类型

我正在使用ASP MVC 5.我在控制器中有一个返回json对象的动作: [HttpGet] public JsonResult GetUsers() { return Json(….., JsonRequestBehavior.AllowGet); } 现在我想使用JSON.Net库,我发现在ASP MVC 5中还存在。 实际上我可以写 using Newtonsoft.Json; 没有从NuGet导入库。 现在我试着写: public JsonResult GetUsers() { return JsonConvert.SerializeObject(….); } 但是我在编译期间出错:我无法将返回类型字符串转换为JsonResult。 我怎样才能在动作中使用Json.NET? 动作的正确返回类型是什么?

Newtonsoft.Json,Populate Dictionary失败

我通过Newtonsoft.json将字典序列化为json,并且代码如下: var serializeSettings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All, TypeNameAssemblyFormat = FormatterAssemblyStyle.Full, Formatting = Formatting.Indented }; var serializedObject = JsonConvert.SerializeObject(dic, serializeSettings); 这段代码生成一个像这样的json: { “$type”: “System.Collections.Generic.Dictionary`2[[System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”, “9648af76-7986-4b34-8b2c-97b2345769ef”: “Test” } 我尝试通过以下代码将json反序列化为字典: var newDic = new Dictionay(); var deserializeSettings = new JsonSerializerSettings { TypeNameHandling = […]

如何解析Json.NET多态对象?

我编写了一个Web服务,它发送并返回用Json.NET创建的json。 我已经包含了类型名称,它允许多态性。 有点黑客攻击 ,我已经使用了Silverlight客户端,但我不知道如何让它适用于javascript客户端。 如何使用javascript解析这个? { “$type”: “MyAssembly.Zoo, MyAssembly”, “ID”: 1, “Animals”: [ { “$type”: “MyAssembly.Dog, MyAssembly”, “LikesBones”: true, “Name”: “Fido” }, { “$type”: “MyAssembly.Cat, MyAssembly”, “LikesMice”: false, “Name”: “Felix” } ] } 这是c#类: public class Animal { public string Name { get; set; } } public class Dog : Animal { public bool LikesBones […]

拦截列表填充以在反序列化中分配值

我有一个递归类(树层次结构),它派生自一个列表,它有子,并且本身是从JSON.NET中的反序列化填充的。 TLDR版本是我想在子类的子级中填充子级中的变量,而不使用来自JSON.NET的$ ref变量(在存储到cookie时节省空间)。 对于那些从昨天开始跟我提问的人,这可能看起来像是重复的,但事实并非如此。 它是相同的代码,但旧的问题围绕着JSON中的setter没有被解雇(解决),并且答案带来了这个问题(更恰当的措辞)。 最初的电话会是: _Items = Cookies.Instance.GetJObject(COOKIE, jsonSetting); 哪个电话: public T GetJObject(string cookieName, JsonSerializerSettings jset = null) { string cookieContent = Get(cookieName); return JsonConvert.DeserializeObject(cookieContent, jset); } 自定义转换器类如下: public class JsonCartConverter : JsonConverter { public override bool CanConvert(Type objectType) { return typeof(CartItem).IsAssignableFrom(objectType); } public override bool CanWrite { get { return false; } } […]

System.MissingMethodException:json数组的反序列化时出错

反序列化jsonString时出错。 错误是Type ‘oodleListingsUser’ is not supported for deserialization of an array. 我的反序列化代码是 string jsonString = new WebClient().DownloadString(“http://api.oodle.com/api/v2/listings?key=TEST&region=region_value&category=category_value&format=json”); JavaScriptSerializer ser = new JavaScriptSerializer(); jsonOodleApi p = ser.Deserialize(jsonString); 我对jsonOodleApi的定义是 public class jsonOodleApi { public oodleCurrent current; public oodleListings[] listings; public oodleMeta meta; public string state { get; set; } } 定义oodleCurrent和oodleMeta我不给予因为它的完美! oodleListings的定义是 public class oodleListings { public […]