Tag: json

如何将Newtonsoft Json.NET引用反序列化为单独的单个实例

我有一块看起来像这样的JSON: [ { “$id”: “1”, “Name”: “James”, “BirthDate”: “1983-03-08T00:00Z”, “LastModified”: “2012-03-21T05:40Z” }, { “$ref”: “1” } ] 正如你可以通过$ ref告诉的那样,这个JSON数组包含两次相同的Person(James)。 第二次是对第一次的引用。 我想知道是否有办法将这个JSON 反序列化为一个包含两个詹姆斯人副本的对象。 目前,我正在使用这个: var jsonSerializerSettings = new JsonSerializerSettings() { PreserveReferencesHandling = PreserveReferencesHandling.None, ReferenceLoopHandling = ReferenceLoopHandling.Ignore }; var deserializedPersons = JsonConvert.DeserializeObject<List>(json, jsonSerializerSettings); 但这只是给我一个数组,其中包含相同的Person实例,两次: object.ReferenceEquals(deserializedPersons[0], deserializedPersons[1]) // Evaluates to true 我发现了一个我不满意的解决方法,它只是反序列化JSON字符串,然后使用上面的jsonSerializerSettings序列化它,它将复制JSON中的人,然后再次反序列化它。 这导致我们正在使用的大型物体出现严重减速。 注意 :我知道我可以更改从检索此JSON的API以复制数据,但保留引用可以在通过线路发送响应JSON时节省大量空间。

JSON到C# – 在json中列出没有子字段名称的字段?

使用Json.net(Newtonsoft.json),我如何定义一个C#类(或类)来处理下面的json? “数据”字段似乎是级别/描述子字段的列表,但请注意它们之前没有字段名称。 “错误”字段似乎是错误编号/错误消息子字段的列表,但请注意,它们也不以字段名称开头。 { “status”: “error”, “data”: [ { “warning” : “your input was wrong” } ], “error”: [ { “373”: “Error description goes here” } ] } 此类定义不会生成解析错误; 但是数据和错误的内容不正确。 public class ApiResponse { [JsonProperty(PropertyName = “status”)] public string Status; [JsonProperty(PropertyName = “data”)] public IEnumerable<KeyValuePair> Data; [JsonProperty(PropertyName = “error”)] public IEnumerable<KeyValuePair> Errors; }; // this […]

反序列化JSON不能使用JSON.NET

使用JSON.NET进行反序列化时,我遇到以下JSON问题。 { “?xml”: { “@version”: “1.0”, “@encoding”: “utf-8” }, “Persons”: { “Person”: [{ “@Id”: “1”, “@Name”: “John”, “@Surname”: “Smith” }, { “@Id”: “2”, “@Name”: “John”, “@Surname”: “Smith”, “Skills”: { “Skill”: [{ “@Id”: “1”, “@Name”: “Developer” }, { “@Id”: “2”, “@Name”: “Tester” }] } }] } } 我正在使用以下课程: public class RootObject { public Xml xml { […]

如何使用C#在POST请求中发送json数据

我想使用C#在POST请求中发送json数据。 我尝试了很多方法,但面临很多问题。 我需要请求使用请求体作为来自字符串的原始json和来自json文件的json数据。 如何使用这两个数据表单发送请求。 例如:对于json中的身份validation请求正文 – > {“Username”:”myusername”,”Password”:”pass”} 对于其他API请求体应从外部json文件中检索。

如何格式化Json输出?

我的Web服务响应有mimetype:“application / json”和我的JSON输出没有间距,像这样 1 {“Data”:{“Item”:”123″,”Timestamp”:”2011-11-24T17:50:43″}} 当JSON应该像这样输出 2 { “Data”:{ “Item”:”123″, “Timestamp”:”2011-11-24T17:50:43″ } } 有什么方法可以修复JSON格式,所以它看起来像#2?

将Json数组解析为c#中的类

我解析了这个单独的Json: { “text”: “Sample Text”, “id”: 123456789, “user”: { “name”: “ExampleUser”, “id”: 123, “screen_name”: “ExampleUser” }, “in_reply_to_screen_name”: null, } 到我的c#class RootObject: public class User { public string name { get; set; } public int id { get; set; } public string screen_name { get; set; } } public class RootObject { public string text { […]

如何使用ServiceStack JsonSerializer序列化ExpandoObject?

是否有可能让ServiceStack JsonSerializer将ExpandoObject序列化为平面对象而不是字典? 大致与此近似的东西: {“x”:”xvalue”,”y”:”\/Date(1313966045485)\/”} 我试图使用三个不同的系统比较ExpandoObject JSON序列化:.NET BCL JavaScriptSerializer,Newtonsoft JSON.NET和ServiceStack的JSON产品。 我从一个相当简单的动态对象开始。 dynamic test = new ExpandoObject(); test.x = “xvalue”; test.y = DateTime.Now; 对于序列化程序来说,将ExpandoObject视为IDictionary似乎更简单。 BCL和ServiceStack都以这种方式开始,但结果与路径完全不同。 JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); Console.WriteLine(javaScriptSerializer.Serialize(test)); // [{“Key”:”x”,”Value”:”xvalue”},{“Key”:”y”,”Value”:”\/Date(1313966045485)\/”}] Console.WriteLine(ServiceStack.Text.JsonSerializer.SerializeToString(test)); // [“[x, xvalue]”,”[y, 8/21/2011 16:59:34 PM]”] 我更喜欢将ExpandoObject序列化更多,因为它是在代码中组装的,就像典型的类会被序列化一样。 您可以为IDictionary的BCL系统添加覆盖JavaScript序列化程序 。 这很好用,假设一个实际上没有IDictionary需要保持这种方式(我还没有)。 JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); javaScriptSerializer.RegisterConverters(new JavaScriptConverter[] { new ExpandoJsonConverter() }); Console.WriteLine(javaScriptSerializer.Serialize(test)); // […]

在ASP.NET WebApi 2中自定义承载令牌JSON结果

我演练了这个官方的ASP.NET教程 ,持票令牌发布如下JSON。 { “access_token”:”boQtj0SCGz2GFGz[…]”, “token_type”:”bearer”, “expires_in”:1209599, “userName”:”Alice”, “.issued”:”Mon, 14 Oct 2013 06:53:32 GMT”, “.expires”:”Mon, 28 Oct 2013 06:53:32 GMT” } 我想添加用户配置文件属性以及上述结果,以减少来自客户端的请求数。 示例如下…… { “access_token”:”boQtj0SCGz2GFGz[…]”, “token_type”:”bearer”, “expires_in”:1209599, “userName”:”Alice”, “.issued”:”Mon, 14 Oct 2013 06:53:32 GMT”, “.expires”:”Mon, 28 Oct 2013 06:53:32 GMT”, “Notifications”:35, “IsEventMember”:true, “Promotion”:324372 } 我使用的oauth提供程序来自默认的ASP.NET模板( ApplicationOAuthProvider.cs ), OAuthOption如下所示。 OAuthOptions = new OAuthAuthorizationServerOptions { TokenEndpointPath = new […]

如何使用Json.NET将IHtmlString序列化为JSON?

我有一个字段包含通过JSON发布的原始HTML,最近从字符串转换为IHtmlString。 当发生这种变化时,该字段从一个JSON字符串变为一个空对象,并且消耗了JSON开始爆炸的一堆东西。 // When it was a string… { someField: “some html string” } // When it became an IHtmlString… { someField: { } } 忽略JSON中原始HTML的任何参数,因为这个项目没有实际意义,我如何在我的JSON序列化中获得预期的字符串?

DefaultModelBinder无法反序列化作为JSON对象传递给操作的.NET Dictionary对象?

我有一个非常简单的课程: public class FilterItem { public Dictionary ItemsDictionary { get; set; } public FilterItem() { ItemsDictionary = new Dictionary(); } } 我想在客户端上填充字典中的数据,然后将其作为JSON对象传递给我的控制器操作。 但无论我在客户端上尝试什么,DefaultModelBinder似乎都无法反序列化它。 以下是调用我的操作的示例javascript代码: var simpleDictionary = {“ItemsDictionary”: {“1”: “5”, “2”: “7”}}; $.ajax({ cache: false, type: “POST”, data: JSON.stringify(simpleDictionary), contentType: “application/json; charset=utf-8”, url: “/Catalog7Spikes/GetFilteredProductsJson”, success: function (data) {…}); 这是我的动作方法的简化版本: [HttpPost] public ActionResult GetFilteredProductsJson(FilterItem filterItem) { […]