Tag: json

即使使用默认设置,Json.NET也会将枚举序列化为字符串

我正在使用Json.NET 7.0.1。 文档说明了这一点 Enum [序列化为]整数(可以是StringEnumConverter的枚举值名称) 在我的Global.asax.cs中,我指定默认设置如下: JsonConvert.DefaultSettings = (() => { var settings = new JsonSerializerSettings(); settings.Converters.Add(new StringEnumConverter()); return settings; }); 但是,在某些情况下,我希望将Enums序列化为整数,例如当我构建要存储在数据库中的JSON时。 我是这样做的: public class JsonSerializedType : IUserType where T : class { private static readonly JsonSerializerSettings serializerSettings = new JsonSerializerSettings(); public void NullSafeSet(IDbCommand cmd, object value, int index) { cmd.Parameters[index].Value = JsonConvert.SerializeObject(value as T, […]

将空XML元素反序列化为Guid.Empty

我有一些反序列化的麻烦。 … … 如果我使用 00000000-0000-0000-0000-000000000000 它正常工作,但是如果我只使用 – 对象没有反序列化( 有没有办法将空元素反序列化为Guid.Empty? 应该使用此元素的值映射的属性: [XmlElement(ElementName = “CardNumber”)] [JsonProperty(“CardNumber”)] public Guid? CardNumber { get; set; } JSON中的相同情况正常工作并使用Guid.Empty而不是空元素值 { “CardNumber”: “” }

Linq查询JObject

我正在使用Json.net进行序列化,然后创建一个如下所示的JObject: “RegistrationList”: [ { “CaseNumber”: “120654-1330”, “Priority”: 5, “PersonId”: 7, “Person”: { “FirstName”: “”, “LastName”: “”, }, “UserId”: 7, “User”: { “Id”: 7, “CreatedTime”: “2013-07-05T13:09:57.87”, “Comment”: “”, }, 我如何查询到一个新的对象或列表,这很容易放入一些html表/视图。 我只想显示CaseNumber,FirstName和Comment。

Newtonsoft.JSON serializeobject返回空的JSON字符串

每个人都得到了很多这个问题,我几乎尝试了一切,但没有一个对我有用。 所以我正在开发Xamarin.Forms并且即将把我的数据发送到服务器。 我有这堂课: public class Customer { public string FirstName { get; set; } public string LastName { get; set; } public string BirthDate { get; set; } public string Password { get; set; } public string EmailAddress { get; set; } public string ContactNumber { get; set; } } 然后我使用了Newtonsoft的SerializeObject方法: Customer customer = new […]

反序列化包含Dictionary的对象列表

我已经看到很多例子似乎表明我正在做的事情应该有效,但无论出于何种原因,它都没有。 我正在尝试反序列化一组对象,其中一个属性是Dictionary,如下所示: class Program { static void Main(string[] args) { var json = “{\”Collection\”:[{\”ID\”:\”1243\”,\”Dictionary\”:[{\”Key\”:\”color\”, \”Value\”:\”red\”},{\”Key\”:\”size\”,\”Value\”:\”large\”}]},{\”ID\”:\”1243\”,\”Dictionary\”:[{\”Key\”:\”color\”, \”Value\”:\”blue\”},{\”Key\”:\”size\”,\”Value\”:\”small\”}]}]}”; //var json = “[{\”ID\”:\”1243\”,\”Dictionary\”:[{\”Key\”:\”color\”, \”Value\”:\”red\”},{\”Key\”:\”size\”,\”Value\”:\”large\”}]},{\”ID\”:\”1243\”,\”Dictionary\”:[{\”Key\”:\”color\”, \”Value\”:\”blue\”},{\”Key\”:\”size\”,\”Value\”:\”small\”}]}]”; List myObjects = new JavaScriptSerializer().Deserialize<List>(json); } } [DataContract] public class MyObject { [DataMember] public string ID { get; set; } [DataMember] public Dictionary Dictionary { get; set; } } 第一个json字符串将整个东西封装在一个对象中 – 如果我运行它,它运行正常,但myObjects只是一个空列表。 如果我运行第二个字符串(没有它被包装)我得到以下错误: […]

REST API包装器设计:将动态json作为JSON.NET JObject / JArray返回

我正在为RESTful JSON API编写一个C#包装器,并使用Json.NET将传入的json反序列化为强类型对象。 但是传入json中的一些属性是高度动态的,它将是一些具有不同数量和类型属性的json对象。 我目前的解决方案是,我将动态json属性映射到我的C#类中的Dictionary (嵌套字典),并编写Custom JsonConverter将动态json转换为嵌套字典。 我的class级看起来像这样: public class Item { [JsonProperty(“item_id”)] public int ItemId { get; set; } [JsonProperty(“type”)] public string Type { get; set; } //Property to map dynamic json object [JsonProperty(“data”)] public Dictionary Data { get; set; } } 它很成功。 问题是,很难从这个嵌套字典中为最终用户访问数据,我们甚至无法在Visual Studio中调试数据的结构。 现在我打算使用JObject或JArray而不是嵌套字典。 这样我们就可以通过调用ToString方法(将原始json数据输出为字符串)来查看数据结构,以及这些类型具有LINQ支持,以便用户可以轻松地从中访问数据。 这是一个很好的做法使用它,考虑到JObject和JArray类型都依赖于第三方库(无论如何Json.NET是我的库的依赖,因为我用它来进行json序列化)。 还是有其他方法可以做到这一点?

如何使用Newtonsoft JSON(de)序列化XmlException?

此示例代码: var json = JsonConvert.SerializeObject(new XmlException(“bla”)); var exception = JsonConvert.DeserializeObject(json); 在Newtonsoft.Json.dll中抛出InvalidCastException:无法将类型为“Newtonsoft.Json.Linq.JValue”的对象强制转换为使用以下堆栈跟踪键入“System.String”: at System.Xml.XmlException..ctor(SerializationInfo info, StreamingContext context) at Void .ctor(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)(Object[] ) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateISerializable(JsonReader reader, JsonISerializableContract contract, JsonProperty member, String id) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract […]

强制JsonConvert.SerializeXmlNode将节点值序列化为整数或布尔值

Newtonsoft.Json.JsonConvert类的SerializeXmlNode函数始终在序列化过程中将XML的最后一个子节点的值作为字符串类型输出,有时您可能需要将它们序列化为整数或布尔值。 示例代码: 12 mytitle false 输出: { “ID” : “12”, “Title” : “mytitle”, “Visible” : “false” } 期望的输出: { “ID” : 12, “Title” : “mytitle”, “Visible” : false } 有没有办法强制XML节点序列化为整数或布尔值? 谢谢。 注意:当XML已经序列化为JSON字符串时,请避免发布变通办法,因为这些变通办法是我们愿意避免的。

Newtonsoft.Json – 反序列化大对象时内存不足exception

我有一个问题反序列化大约1GB的JSON文件。 当我运行以下代码时,我得到一个内存不足exception: using (FileStream sr = new FileStream(“myFile.json”, FileMode.Open, FileAccess.Read)) { using (StreamReader reader = new StreamReader(sr)) { using (JsonReader jsReader = new JsonTextReader(reader)) { JsonSerializer serializer = new JsonSerializer(); dataObject = serializer.Deserialize(jsReader); } } } 抛出exception Newtonsoft.Json.Linq.JTokenWriter.WriteValue(Int64 value) 序列化效果很好,这是我正在使用的代码 using (StreamWriter reader = new StreamWriter(“myFile.json”)) { using (JsonReader jsWriter = new JsonWriter(reader)) { JsonTextWriter […]

使用JSON.NET获取JSON值的路径

我试图找到一个JSON值的路径。 考虑以下JSON: { “car”: { “type”: [{ “sedan”: { “make”: “honda”, “model”: “civics” } }, { “coupe”: { “make”: “ford”, “model”: “escort” } }] } } 我怎样才能获得价值“本田”的路径? 我想找到这样的东西…… car_type_0_sedan_make_ honda JSON.NET是否支持此function? 我看到有一个JToken.Path属性,但它目前不可用。 http://json.codeplex.com/workitem/24136