Tag: json.net

JsonPropertyAttribute忽略派生类中的私有属性

在序列化具有私有属性的派生对象时,我遇到了Json.Net的问题。 好吧 public class Base { [JsonProperty] private string Type { get { return “Base”; } } } public class Inherited : Base { [JsonProperty] private string Type { get { return “Inherited”; } } } 当我序列化Inherited实例时, Type属性始终设置为“Base”。 我发现工作的唯一方法是属性受保护或公共,并在子类中重写。 为什么这样工作? 那是一个错误吗?

JSON.NET为什么它添加到列表而不是覆盖?

public class MyClass { public List myList = new List { 1337 }; public MyClass() {} } var myClass = JsonConvert.DeserializeObject(“{myList:[1,2,3]}”); Console.WriteLine(string.Join(“,”, myClass.myList.ToArray())); //1337,1,2,3 为什么它显示1337,1,2,3而不是1,2,3? 有没有办法/设置让JSON.NET覆盖List而不是添加元素? 我需要一个不修改构造函数的解决方案。

使用JSON填充现有对象

我使用Json.Net填充类,如下所示: var account = JsonConvert.DeserializeObject(result.ToString()); 上面的结果JSON字符串填充了我的Account类中的几个属性。 我后来有一个新的JSON字符串,并希望用剩余的属性填充相同的Account类。 这可能使用JSON.NET或JsonConvert方法吗? 我基本上想要添加/添加到我在上面的代码行中填充的帐户对象。 我的课: public class Account { public string CID { get; set; } public string jsonrpc { get; set; } public string id { get; set; } public List mail { get; set; } public List uid { get; set; } public List userPassword { get; set; […]

HttpClient PostAsJsonAsync与Newtonsoft.Json不兼容

我刚刚在winforms应用程序中找到的东西 我的应用程序对Web Api服务进行http调用,如下所示 HttpClient _client = new HttpClient(); _client.Timeout = new TimeSpan(0, 3, 0); _client.BaseAddress = new Uri(“http://Myserver/MyApp”); _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(“application/json”)); HttpResponseMessage response = _client.PostAsJsonAsync(“api/Addin”, newObject).Result; 没什么好看的,但只要你通过nuget安装Newtonsoft.Json(V6.0.3) 突然我在HttpResponseMessage代码行上遇到stackOverflow错误。 删除Newtonsoft,问题解决了。 问题是我是使用库来序列化/反序列化我表单中其他地方的数据 我的解决方法是使用不同的库,我只使用System.Runtime.Serialization.Json; 但这仍然很奇怪,不是吗? 我还应该补充一点,这是dotnet v4.0(而不是4.5),我的应用程序是在MsWord中作为Add On运行的VSTO COM对象 我怀疑牛顿软件中可能存在一个错误

即使使用默认设置,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, […]

Json.net`JsonConstructor`构造函数参数名称

通过JsonConstructor使用特定的.ctor反序列化IList属性时,参数名称必须与原始 Json名称匹配,并且不使用这些属性上的JsonProperty映射。 例: SpokenLanguages参数始终为null,因为它与spoken_languages不匹配,但有一个JsonProperty映射它: public partial class AClass : ISomeBase { public AClass() { } [JsonConstructor] public AClass(IList SysTypes, IList production_countries, IList SpokenLanguages) { this.Genres = SysTypes?.ToList(); this.ProductionCountries = production_countries?.ToList(); this.SpokenLanguages = SpokenLanguages?.ToList(); } public int Id { get; set; } public IList Genres { get; set; } [JsonProperty(“production_countries”)] public IList ProductionCountries { get; set; […]

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 […]

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 […]