Tag: json.net

如何将参数传递给构造函数反序列化json

在使用Newtonsoft.Json反序列化对象时,将一些父实例传递给构造函数时遇到一个小问题。 我们假设我有以下课程 public class A { public string Str1 { get; set; } public IList Bs { get; set; } } public class B { public B(A a) { // a should not be null! Console.WriteLine(a.Str) } } 现在我对这个对象a serailze而不是反序列化: A a = new A() a.Bs = new List() a.Bs.Add(new B(a)); a.Bs.Add(new B(a)); a.Bs.Add(new B(a)); […]

Json日期时间问题

可能重复: 如何强制netwtonsoft json序列化程序将datetime属性序列化为字符串? 我使用Newtonsoft.Json将我的对象转换为JSon文件。 但我遇到日期时间问题,在我的对象datetime字段设置为”7/30/2012 8:29:12 PM”但在Json文件中我得到这种格式的日期时间字段”\/Date(1343660352227+0530)\/” 我需要以与对象相同的格式获取日期时间。 有可能吗?为了获得相同的格式,我该怎么办?

Json.NET如何在反序列化期间执行dependency injection?

当我有一个没有默认构造函数的类,即使用dependency injection来传递其依赖项时, Newtonsoft.Json可以创建这样的对象吗? 例如: public class SomeFoo { private readonly IFooDependency _dependency; public SomeFoo(IFooDependency dependency){ if(dependency == null) throw new ArgumentNullException(“dependency”); _dependency = dependency; } public string Data { get; set; } public int MoreData { get; set; } public void DoFoo(){ Data = _dependency.GetFooData(); MoreData = _dependency.GetMoreFooDate(); } } 在序列化过程中,我只关心存储Data和MoreData(以及对象的类型,但暂时不要复杂化)。 现在,为了反序列化,我可以调用类似的东西 var obj = […]

NullValueHandling.Ignore与JsonConverter :: WriteJson

我正在尝试执行自定义序列化,所有快乐路径代码都可以工作,但是空值路径不符合我的要求。 我已将序列化程序设置设置为NullValueHandling.Ignore并且我的对象图的其他部分为空(并且不使用我的自定义序列化),删除了空值。 看起来像Newtonsoft序列化程序写入字符串生成器所以我们应该能够“回放”任何书面的json标记但我不知道如何不写任何东西。 什么都不做,只是返回导致序列化程序抛出exception,因为json无效。 有什么线索吗? public class SpecialConvertor : JsonConverter { public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { if (value == null || (int)value == 0) { if (serializer.NullValueHandling == NullValueHandling.Ignore) { //how to make this work? } else { writer.WriteNull(); } return; } // the rest of WriteJson } // the […]

将Json.NET对象转换为传统的.NET对象,而不知道类型

如何将Json.NET对象转换为传统的.NET类型( JArray of string to List , JTokenType=Integer to int等)? 我发现使用AutoMapper或JToken.ToObject建议很少。 当在编译时知道JSON结构时,这是一个很好的建议,但是我不能创建一个表示未知数据的类,或者在我不知道底层类型时指定转换。 Json.NET没有“ConvertToWhateverIsProbablyMostAppropriate()”成员。 🙂 那么为什么不只是通过JWhatever枚举JWhatever对象,让它们保持原样? 因为我不能将这些类型作为参数传递给(比如)Dapper,它不知道来自spoo的JToken 。

删除JSON和Update JSON中的Null值

我通过使用Newtonsoft序列化列表将JSON数组作为字符串,如下所示 [{“ID”:”1″,”Name”:”somename”,”Class”:”12″,”Section”:null},{“ID”:null,”Name”:”somename”,”Class”:”13″,”Section”:null},{“ID”:2,”Name”:”somename”,”Class”:null,”Section”:”A”}] 我需要通过将NULL值转换为另一个JSONString来转换此JSON,如下所示 [{“ID”:”1″,”Name”:”somename”,”Class”:”12″,},{“Name”:”somename”,”Class”:”13″,},{“ID”:2,”Name”:”somename”,”Section”:”A”}] 有没有办法可以使用Newtonsoft或者我如何使用它。

Facebook JSON字符串的反序列化?

我无法解决从运行我的fql查询后生成的JSON字符串中提取facebook用户的work_history,affiliations和current_loc的问题。 我做了这堂课: public class Data { public CurrentLocation current_location { get; set; } public WorkHistory[] work_history { get; set; } public EducationHistory[] education_history { get; set; } } public class EducationHistory { public string name { get; set; } public int? year { get; set; } public string school_type { get; set; } } public […]

JObject.ToObject ()扩展方法转换存储为字符串的日期时间值

使用字符串属性在JObject上调用ToObject时,转换datetime值。 class Program { static void Main(string[] args) { var a = JObject.Parse(“{\”aprop\”:\”2012-12-02T23:03:31Z\”}”); var jobject = a.ToObject(); Console.ReadKey(); } } public class A { public string AProp { get; set; } } 问题是,尽管它是一个字符串,我仍然可以改变我的价值。 跳过了ISO8601特定字符: 我希望不会发生任何转变,并且希望能够自己进行日期validation和特定于文化的创建。 我也尝试了下一个代码没有成功: var jobject = a.ToObject(new JsonSerializer { DateParseHandling = DateParseHandling.None }); 例如,为了介绍JObject.Parse 。 在我的实际任务中,我在控制器上有一个Web.Api动作: public HttpResponseMessage Put(JObject[] requestData) { var […]

使用JSON.NET在C#中将动态JSON字符串解析为字符串

这是我在C#和JSON上的第一个小项目。 我被要求将JSON文件解析为以下内容:我正在尝试创建一个窗体,其主体将包含以下格式的JSON字符串的内容: Name of the object (Label) name of the attribute of the object – (TextBox) editable value (Label) name of the attribute of the object – (TextBox) editable value … 我在json文件中有每个对象约35个属性和8个对象。 总共有大约50种不同的属性。 我搜索了JSON – C# – JSON.NET并阅读了超过15个问题和答案。 对于像我这样的初学者来说,答案有一些有价值的信息,但我无法将答案与我的情况联系起来。 原因如下: 一些答案将json字符串转换为C#对象。 因为我需要对象属性的“名称”,所以这个选项并不能解决我的问题。 我不知道如何在源代码中获取变量的名称并在Windows窗体中使用它。 一些答案将json字符串转换为数据结构。 我并不完全了解字典及其属性,但根据定义,我认为,字典会将2个值相互映射。 在我的例子中,3-5个不同的对象可能具有相同的属性,因此对于一个属性,将有多个值。 除此之外,我见过的一个例子是: var dict = new JavaScriptSerializer().Deserialize<Dictionary>(json); var postalCode = […]

JsonConverter等效于HTTP GET参数

在为HTTP POST函数编写C#Web API控制器时,我可以在参数对象的属性上使用Newtonsoft JSON的属性。 特别是,我可以在enum类型的属性上使用JsonConverter属性 ,将从客户端接收的字符串表示forms转换为其中一个enum值(对于响应对象,则返回): public class MyArgumentsDTO { [JsonConverter(typeof(SomeEnumConverter))] public SomeEnum MyValue { get; set; } } // in the controller: [Route(“doSomething”)] [HttpPost] public Boolean DoSomething(MyArgumentsDTO options); 但是,对于期望这种enum类型的参数的HTTP GET方法,我该怎么办? [Route(“getSomething”)] [HttpGet] public Boolean GetSomething(SomeEnum myValue); 是否有一个属性,我可以用相应的参数来装饰,以指示(字符串到枚举)转换器? (要清楚,我使用枚举作为一个例子,因为我经常使用这种技术(使用HTTP POST)和枚举。假设任何适用于枚举的解决方案都适用于任何其他(可能是复杂的)数据类型。) 当然,我可以将参数声明为string并在方法体中自行进行转换。 然而,这似乎是不洁净的,我同意相关答案中的陈述: 将所有枚举参数定义为字符串,然后在任何地方解析它们意味着您必须在每个操作上执行此操作,并且您需要提出一致的方法,以便所有解析错误都符合。 不幸的是,我不理解该答案中提出的解决方案,因为它甚至没有涉及使用该TypeEnum提到的TypeEnum 。 当我需要一个enum参数时,使用HTTP POST代替HTTP GET方法似乎也有些错误。 我认为不应该根据这些内部技术来选择HTTP方法。