Tag: json.net

“EF BB BF”在Visual Studio中创建的JSON文件的开头

我在我的一个项目中将一堆JSON文件设置为Embedded resource 。 我正在使用Newtonsoft.Json来解析这些文件: public static string ReadStringFromStream(string streamName) { using (System.IO.Stream stream = new EmbeddedResourceReader().GetType().Assembly.GetManifestResourceStream(streamName)) { byte[] result = new byte[stream.Length]; stream.Read(result, 0, (int)stream.Length); var str = Encoding.UTF8.GetString(result); return str; } } … var traits = JsonConvert.DeserializeObject(EmbeddedResourceReader.ReadStringFromStream(“LNTCore.Genres.json”)); Genres = traits; 这会在Newtonsoft.Json中引发exception,因为它无法解析文件的开头。 在这种情况下,最佳做法是什么? 我应该如何处理这种情况? 谢谢!

我可以将json解析为字符串或其他具体类型作为对象吗?

我想拥有类型object属性,可以是string或Template类型。 是否有可能告诉Json.NET将某些内容解析为几种指定类型之一? class MyClass { public object Template { get; set; } } 其中Template = “TemplateName” { “Template”: “TemplateName” } 或Template = new Template() { “Template”: { “Name”: “OtherTamplate”, … } } 更新: 我试图遵循@krillgar的建议并创建一个自定义的JsonConverter但不幸的是CanConvert方法只接收目标类型,在这种情况下是object 。 这些信息不足以告诉它可以反序列化(如果我有其他object属性)。 我想我毕竟需要它是一个Template或创建像TemplateReference类的派生类型: class myconverter : JsonConverter { public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { throw new NotImplementedException(); […]

Json.NET:使用双引号进行消毒

我试图反序列化作为服务响应收到的json字符串。 客户端是Windows Phone 7,在C#中。 我正在使用Json .NET – James Newton-King deserializor直接将Json字符串转换为对象。 但有时Json字符串包含一些带有双引号(“)的注释信息,并且反序列化器失败并引发错误。根据Jsonlint看起来这是一个无效的Json字符串。 { “Name”: “A1”, “Description”: “description of the “object” A1″ } 如何处理这样的Json String。 如果它是(\“),那么它可以工作。但我不能用(\”)替换所有(“),​​因为在json字符串的其他部分可能有双引号。是否有任何Json .Net的解码函数?

JSON.net,C#,无法在数据模型中设置默认值

我正在使用JsonConvert.DeserializeObject(json.ToString()); 反序列化JSON并在相关模型中填充我的字段。 这种方法很有效,直到JSON中缺少数据。 基本上没有“key:value”我只会有“key:null”。 我对JsonConverter的理解是它会创建一个对象,我应该能够通过构造函数填充默认值的字段(在我的情况下不会因为未知原因而调用),或者通过这里提到的标记: 使用JSON.net或此处缺少属性的默认值 : 为什么在使用JSON.NET反序列化时会忽略我的默认值? 我已尝试过两者,但都没有导致相关字段被初始化。 当然,如果JSON中没有数据,则无法对相关模型进行反序列化。 但是我希望我仍然可以使用默认值初始化一些值,然后JsonConverter会忽略(不会被覆盖)(就像现在发生的那样)。 然而,这似乎不可能? 以前尝试的源代码 模特课 namespace Project.MyJob { public class JsonModel { public JsonModel() { Type_X type_x = new Type_X(); // This is not doing anything. I would have expected that the // class’ constructor would be called but, no. } public string objectNumber { get; […]

C#序列化并反序列化json到txt文件

我正在使用NewtonSoft在我的wpf应用程序中处理json。 我有一个客户可以保存到txt文件(不涉及数据库)。 我是这样做的: public int store(string[] reservation) { JObject customer = new JObject( new JProperty(“id”, this.getNewId()), new JProperty(“name”, reservation[0]), new JProperty(“address”, reservation[1]), new JProperty(“gender”, reservation[2]), new JProperty(“age”, reservation[3]) ); using (StreamWriter file = File.CreateText(Settings.databasePath + “customer.json”)) using (JsonTextWriter writer = new JsonTextWriter(file)) { customer.WriteTo(writer); } return 1; } 结果如下: {“id”:1,”name”:”Lars”,”address”:”Bosch 10″,”gender”:”Man”,”age”:”19″} 然后我试图让所有客户都这样: if(File.Exists(Settings.databasePath + “customer.json”)) […]

Json.NET – 控制类对象 – 属性反序列化

我有一个使用JSON.Net反序列化的模型类Link 。 public class Link { [JsonConstructor] internal Link(int id) { Id = id; } public int Id { get; internal set; } [JsonProperty(“title”)] public string Title { get; internal set; } [JsonProperty(“description”)] public string Description { get; internal set; } … and so on public Avatar AuthorAvatar { get; internal set; } } 头像包含三个属性: […]

反序列化对象将所有值设置为空

我正在尝试将JSON反序列化为自定义对象,但我的所有属性都设置为null并且不确定发生了什么。 有人看错了吗? JSON示例 { “Keys”: [ { “RegistrationKey”: “asdfasdfa”, “ValidationStatus”: “Valid”, “ValidationDescription”: null, “Properties”: [ { “Key”: “Guid”, “Value”: “i0asd23165323sdfs68661358” } ] } ] } 这是我的代码,其中strResponseValid是上面的JSON。 Keys myDeserializedObjValid = (Keys)JsonConvert.DeserializeObject(strResponseValid, typeof(Keys)); validationStatusValid = myDeserializedObjValid.ValidationStatus; 这是我的课程 public class Keys { public string RegistrationKey { get; set; } public string ValidationStatus { get; set; } public string […]

如何将大型JSON对象直接序列化为HttpResponseMessage流?

有没有办法将大型JSON对象直接流式传输到HttpResponseMessage流? 这是我现有的代码: Dictionary hugeObject = new Dictionary(); // fill with 100,000 key/values. Each string is 32 chars. HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK); response.Content = new StringContent( content: JsonConvert.SerializeObject(hugeObject), encoding: Encoding.UTF8, mediaType: “application/json”); 适用于较小的物体。 但是,调用JsonConvert.SerializeObject()将对象转换为字符串的过程会导致大对象出现有问题的内存峰值。 我想做相当于这里描述的反序列化 。

如何在Web Api Post请求Json中检测重复键

当请求Json包含重复键时,我需要从ASP.NET Web API Post请求返回400错误。 例如,如果请求是 { “key1”: “value1”, “key2”: 1000, “key2”: 2000, “key3”: “value3” } 然后我想要抛出错误,因为有两个“key2”键。 我的控制器方法看起来像 [HttpPost] public IHttpActionResult PostMethod([FromBody]RequestModel request) { ….. } 和我的RequestModel模型一样 public class RequestModel { [Required] public string Key1 {get; set; } [Required] public int Key2 {get; set; } public string Key3 {get; set; } } 在上面的示例中,Json序列化程序似乎很乐意接受请求并使用2000填充Key2,或者密钥的最后一个实例。 我想我需要做一些涉及JsonSerializerSettings类的事情,或者实现一个自定义的JsonConverter,但我不确定如何继续。

序列化为JSON,尽管指定了NullValueHandling,但使用Json.NET和Web API省略了Nullable Date

using Newtonsoft.Json; namespace FAL.WebAPI2012.Controllers { public class Person { public int Id {get;set;} public string FirstName {get;set;} public string LastName {get;set;} [JsonProperty(DefaultValueHandling = DefaultValueHandling.Include, NullValueHandling = NullValueHandling.Include)] public DateTime? Dob { get; set; } } public class TestNullsController : ApiController { // GET api/ public Person Get() { Person myPerson = new Person() { Dob […]