Tag: json.net

将具有可变属性的JSON对象解析为强类型对象

{ “Profile”: { “dProperty1”: { “a”: “value”, “b”: “value”, “c”: “value”, “d”: “value”, “e”: “value” }, “dProperty2”: { “a”: “value”, “b”: “value”, “d”: “value”, “e”: “value” }, “dProperty3”: { “a”: “value”, “b”: “value”, “d”: “value”, “e”: “value” } } } 我有一个JSON对象,它可以有任意数量的动态属性。 所有属性都是主要由相同字段组成的对象。 如何将此JSON解析为C#中的强类型对象?

LINQ to SQL类序列化时的循环引用exception

我有一组linq到sql类,并使用.NET JavaScriptSerializer将它们序列化为JSON。 但是,只要我将记录添加到关联表中,序列化就会抛出“循环引用exception”。 Aaarggh! 这里详细描述。 我有几个选择 将linq转换为sql类到没有关系的类,从而避免循环引用 通过归零关联来剪切循环引用 – 我不认为这是一个真正的选项 使用ScriptIgnoreAttribute(不知何故)。 我无法轻松应用它,因为属性在生成的类中,LINQ to SQL不会自动遵循伙伴类 使用JSON.NET并以某种方式使用属性+伙伴类来阻止序列化程序尝试跨越关系。 有人遇到过这种情况么? 如果可能,我真的更喜欢最后一个选项,但我不知道该怎么做。 任何帮助是极大的赞赏

如何在使用JSON.Net进行序列化期间有条件地忽略字段和属性?

如何在使用JSON.Net进行序列化期间有条件地忽略字段和属性? 我不能从JsonIgnoreAttributeinheritance,因为它是一个sealed类。 我该怎么办?

使用未知属性名解析JSON.NET中的JSON

我有一些JSON数据,如下所示: { “response”:{ “_token”:”StringValue”, “code”:”OK”, “user”:{ “userid”:”2630944″, “firstname”:”John”, “lastname”:”Doe”, “reference”:”999999999″, “guid”:”StringValue”, “domainid”:”99999″, “username”:”jdoe”, “email”:”jdoe@jdoe.edu”, “passwordquestion”:””, “flags”:”0″, “lastlogindate”:”2013-02-05T17:54:06.31Z”, “creationdate”:”2011-04-15T14:40:07.22Z”, “version”:”3753″, “data”:{ “aliasname”:{ “$value”:”John Doe” }, “smsaddress”:{ “$value”:”5555555555@messaging.sprintpcs.com” }, “blti”:{ “hideemail”:”false”, “hidefullname”:”false” }, “notify”:{ “grades”:{ “$value”:”0″ }, “messages”:{ “$value”:”1″ } }, “beta_component_courseplanexpress_1”:{ “$value”:”true” } } } } 我正在使用C#和JSON.NET来解析数据。 我已经能够使用这个算法成功获取数据: User MyUser = new User(); JToken data = […]

在填充现有对象时添加项目之前清除集合

我有一个对象,它有几个使用public getter但私有setter定义的集合属性。在这种情况下, JsonConvert.PopulateObject将反序列化的项添加到这些集合中,使现有项保持不变。 在反序列化之前清除此类成员集合时,我需要一种行为。 我尝试在标有[OnDeserializing]属性的方法中手动清除集合。 该方法的问题在于,即使JSON字符串中不存在collection属性,它仍将清除集合。 当只有那些集合被清除时,我需要一种方法,这些集合实际上是在JSON字符串中定义的。 那些未定义的应该保持不变。 谢谢

JSON计数仅返回1而不是2

我有这行代码(总是返回1): int rowsCount = token[“rows”].Count(); 令牌[“行”]是: { “component”: [ { “tag”: “CUT”, “missingValue”: “”, “format”: “Cont”, “varName”: “GPA”, “label”: “Grade point average”, “element”: [ { “startValue”: “1”, “endValue”: “249”, “label”: “Lower than 2.50” }, { “startValue”: “250”, “endValue”: “299”, “label”: “2.50 – 2.99” }, { “startValue”: “300”, “endValue”: “349”, “label”: “3.00 – 3.49” }, { […]

Json.net如何将对象序列化为值

我通过文档,StackOverflow等仔细研究,似乎无法找到这个…… 我想要做的是将一个简单的值类型的对象序列化/反序列化为值,而不是对象,如下所示: public class IPAddress { byte[] bytes; public override string ToString() {… etc. } public class SomeOuterObject { string stringValue; IPAddress ipValue; } IPAddress ip = new IPAddress(“192.168.1.2”); var obj = new SomeOuterObject() {stringValue = “Some String”, ipValue = ip}; string json = JsonConverter.SerializeObject(obj); 我想要的是让json像这样序列化: // json = {“someString”:”Some String”,”ipValue”:”192.168.1.2″} <- value serialized as […]

找不到方法’Void Newtonsoft.Json.Serialization.DefaultContractResolver.set_IgnoreSerializableAttribute(Boolean)

我下载了webapi的示例代码,我得到了这个例外我使用Visual Studio 2012 Ultimate Version打开了这个示例,我安装了最新版本的newtonsoft。我运行这个应用程序时遇到此错误。它编译成功。 知道为什么会出现这个错误并且有办法解决这个exception。 System.MissingMethodException was unhandled by user code HResult=-2146233069 Message=Method not found: ‘Void Newtonsoft.Json.Serialization.DefaultContractResolver.set_IgnoreSerializableAttribute(Boolean)’. Source=System.Net.Http.Formatting StackTrace: at System.Net.Http.Formatting.JsonContractResolver..ctor(MediaTypeFormatter formatter) at System.Net.Http.Formatting.JsonMediaTypeFormatter..ctor() at System.Net.Http.Formatting.MediaTypeFormatterCollection.CreateDefaultFormatters() at System.Net.Http.Formatting.MediaTypeFormatterCollection..ctor() at System.Web.Http.HttpConfiguration.DefaultFormatters() at System.Web.Http.HttpConfiguration..ctor(HttpRouteCollection routes) at System.Web.Http.GlobalConfiguration.b__0() at System.Lazy`1.CreateValue() at System.Lazy`1.LazyInitValue() at System.Lazy`1.get_Value() at System.Web.Http.GlobalConfiguration.get_Configuration() at System.Web.Http.RouteCollectionExtensions.MapHttpRoute(RouteCollection routes, String name, String routeTemplate, Object defaults, Object constraints, […]

如何从generics类型获取的名称并将其传递给JsonProperty()?

我使用下面的代码得到以下错误: “非静态字段,方法或属性’Response.PropName’需要对象引用” 码: public class Response : Response { private string PropName { get { return typeof(T).Name; } } [JsonProperty(PropName)] public T Data { get; set; } }

如何在反序列化JSON时将ObjectCreationHandling.Replace应用于所选属性?

我有一个包含List<Tuple>属性的类,其默认构造函数分配列表并使用一些默认值填充它,例如: public class Configuration { public List<Tuple> MyThreeTuple { get; set; } public Configuration() { MyThreeTuple = new List<Tuple>(); MyThreeTuple.Add(new Tuple(-100, 20, 501)); MyThreeTuple.Add(new Tuple(100, 20, 864)); MyThreeTuple.Add(new Tuple(500, 20, 1286)); } } 当我使用Json.NET从JSON反序列化此类的实例时,JSON中的值将添加到列表中而不是替换列表中的项,从而导致列表具有太多值。 在反序列化列表期间 , Json.Net调用属性getter中给出了此问题的解决方案,从而导致重复项 。 var settings = new JsonSerializerSettings { ObjectCreationHandling = ObjectCreationHandling.Replace }; var config = JsonConvert.DeserializeObject(jsonString, settings); 这会导致Json.NET为正在反序列化的所有内容分配新的实例。 但是,这引入了另一个问题:我的类存在于更大的对象图中,并且图中的某些类型没有默认构造函数。 […]