Tag: json.net

序列化Json属性,有时候是一个数组

有没有办法在单个操作中序列化从十进制到十进制[]的Json对象属性? 在我的Json产品Feed中,特价商品表示为数组(正常价格/促销价)。 普通商品只是价格。 像这样: [ { “product” : “umbrella”, “price” : 10.50, }, “product” : “chainsaw”, “price” : [ 39.99, 20.0 ] } ] 我可以让它工作的唯一方法是,如果我将属性设置为这样的对象: public class Product { public string product { get; set; } public object price { get; set; } } var productList = JsonConvert.DeserializeObject<List>(jsonArray); 但是,如果我尝试使其成为decimal [],那么它将在单个十进制值上抛出exception。 使它成为一个对象意味着数组值是一个JArray所以我以后必须做一些清理工作,我的应用程序中的其他映射要求属性类型是准确的所以我必须将其映射到未映射的属性然后初始化另一个属性没什么大不了的,但命名有点混乱。 对象是这里唯一的选择还是我可以使用序列化程序做一些魔法,要么将单个值添加到数组,要么将第二个值添加到单独的属性以获得特价?

如何将任何对象序列化为字符串?

我遇到了一个问题,我的JSON序列化程序由于字符<不时出现而随机失败。 我无法确定这是从哪里来的,我想 – 在例外 – 使用不同的方法重新编译,以便我可以看到有问题的对象的完整表示。 有没有办法做到这一点? 我目前的代码: // data is of type ‘object’ serialized = JsonConvert.SerializeObject(data, new JsonSerializerSettings() { Error = delegate(object sender, ErrorEventArgs args) { // reserialize here and output object so I know what the heck is going on } })

如何使用Json.NET将XML序列化为JSON对象

我可以将XML序列化为JSON字符串,如下所示: var xml = new XmlDocument(); xml.LoadXml(“John”); string jsonString = Newtonsoft.Json.JsonConvert.SerializeXmlNode(xml, Newtonsoft.Json.Formatting.None); Response.ContentType = “application/json”; Response.Write(Newtonsoft.Json.JsonConvert.SerializeObject(jsonString)); 那会给我: “{\”person\”:{\”name\”:\”John\”}}” 但是,如何将其序列化为JSON对象? 像这样: {“person”:{“name”:”John”}}

Json.Net DeserializeObject失败,只有OData.Delta – 整数

这个问题正在影响我的ASP.Net WebApi补丁方法,看起来很像这样: public MyModel Patch(int id, [FromBody]Delta newRecord){/*stuff here*/} 但这不是WebApi的问题 – 失败发生在Json.Net和OData.Delta之间。 问题是JsonConvert.DeserializeObject没有看到OData.Delta对象的整数,我想知道是否有可以应用的解决方法或修复。 更新:在Json.Net库中编写了代码(请参阅下面的右下角),以解决此问题。 只需将它包含在下一次更新中(如果James Newton-King允许的话) 更新2:经过进一步测试,我决定最好的做法是停止使用OData.Delta并自己编写(见答案) 用于certificate问题存在的unit testing(为了清楚起见,使用下面的语句) 测试1:使用int(Int32)失败: class TestObjWithInt { public int Int { get; set; } } [TestMethod] public void IsApplied_When_IntIsDeserializedToDelta() { string testData = “{\”Int\”:1}”; var deserializedDelta = JsonConvert.DeserializeObject<Delta>(testData); var result = deserializedDelta.GetChangedPropertyNames().Contains(“Int”); Assert.IsTrue(result); } 测试2:长成功(Int64) class TestObjWithLong { public […]

反序列化期间JSON.Net忽略属性

我有一个课程设置如下: public class Foo { public string string1 { get; set; } public string string2 { get; set; } public string string3 { get; set; } } 我使用Json.Net反序列化以下Json响应: string json = “[{\”number1\”: 1, \”number2\”: 12345678901234567890, \”number3\”: 3}, {\”number1\”: 9, \”number2\”: 12345678901234567890, \”number3\”: 8}]”; 反序列化代码: List foos = JsonConvert.DeserializeObject<List>(json); 第二个数字超过int-64,但我并不真正关心检索该值。 有没有办法将’number2’属性转换为字符串,或者在反序列化期间完全忽略它? 我尝试将'[JsonConverter(typeof(string))]属性添加到string2属性,但收到错误:’创建System.String时出错’。 我也试过设置typeof(十进制)。 我也试过使用[JsonIgnore],但这不起作用。

Type是接口或抽象类,无法实例化

我将在前言中说我知道问题是什么,我只是不知道如何解决它。 我正在与.NET SOA数据层进行通信,该数据层将数据作为JSON返回。 一种这样的方法返回一个在其中包含多个集合的对象。 该对象基本上如下所示: { “Name”:”foo”, “widgetCollection”:[{“name”,”foo”}, {“name”,”foo”},], “cogCollection”: [{“name”,”foo”}, {“childCogs”,<>},], } 我的代表这个对象的类看起来像这样: public class SuperWidget : IWidget { public string Name { get; set; } public ICollection WidgetCollection { get; set; } public ICollection CogCollection { get; set; } public SuperWidget() { } [JsonConstructor] public SuperWidget(IEnumerable widgets, IEnumerable cogs) { WidgetCollection = new […]

Json.Net可以处理List 吗?

List list = LoadUsers(); JObject json = new JObject(); json[“users”] = new JValue(list); 似乎不起作用? 错误: Could not determine JSON object type for type System.Collections.Generic.List`1

Json.NET如何覆盖通过属性定义自定义JsonConverter的类型的序列化?

我试图使用Json.NET和自定义JsonConverter对象反序列化一个类。 该类当前使用JsonConverterAttribute定义了用于默认序列化的转换器。 我需要通过传入自定义转换器来进行自定义反序列化。 但是,反序列化似乎仍然使用默认转换器。 如何让Json.NET更喜欢我的自定义转换器? 以下是一些演示此问题的示例代码。 我正在使用NewtonSoft.Json 4.5.11: void Main() { JsonConvert.DeserializeObject(“{}”); // throws “in the default converter” var settings = new JsonSerializerSettings { Converters = new[] { new CustomConverter() } }; JsonConvert.DeserializeObject(“{}”, settings); // still throws “in the default converter” :-/ } [JsonConverter(typeof(DefaultConverter))] public class Foo { } public class DefaultConverter : JsonConverter { […]

JSON序列化中属性名称的默认camel案例

我有一堆类将在某些时候被序列化为JSON,为了遵循后端的C#约定和前端的JavaScript约定,我一直在定义这样的属性: [JsonProperty(PropertyName=”myFoo”)] public int MyFoo { get; set; } 所以在C#中我可以: MyFoo = 10; 在Javascript中,我可以: if (myFoo === 10) 但是为每个房产做这件事都很乏味。 是否有一种快速简便的方法来设置JSON.Net处理属性名称的默认方式,因此除非另有说明,否则它将自动显示案例?

使用Json.Net在MVC中返回未转义的Json

我在使用Json.Net在MVC项目中找出如何返回未转义的Json时遇到了令人惊讶的麻烦。 它完全暗指我,但我确定我错过了一些简单的东西…… 到目前为止,我序列化了一个基本对象,并让Json.Net对其进行序列化: public JsonResult GetTimelineJson() { var result = new MyGraph([some data…]); return Json(JsonConvert.SerializeObject(result), JsonRequestBehavior.AllowGet); } 结果: “{\r\n \”id\”: \”myGraph\”,\r\n \”title\”: \”Graph title\”,\r\n […] 任何将它包装成HtmlString等的尝试都会导致在线上传递一个空集(尽管调试点显示它正确地未转义)。 我已经检查过HTTP标头中是否正确设置了内容类型。 任何和所有的帮助表示赞赏,谢谢。