Tag: json.net

从web api返回没有其属性的JsonResult

我有一个Web API控制器,从那里我将一个对象作为JSON从一个动作返回。 我是这样做的: public ActionResult GetAllNotificationSettings() { var result = new List(); // Filling the list with data here… // Then I return the list return new JsonResult { Data = result }; } 但是这样,包含其Data属性的JsonResult对象被序列化为JSON。 所以我通过动作返回的最终JSON如下所示: { “ContentEncoding”: null, “ContentType”: null, “Data”: { “ListItems”: [ { “ListId”: 2, “Name”: “John Doe” }, { “ListId”: 3, […]

在属性的Json DeserializeObject上运行转换

假设json字符串如下: string json = ‘{“string_property”:”foo_bar”, … other objects here …}’; 我想知道是否有办法在解析的对象上运行转换,这样我就可以在运行以下方法之后获得foo bar (可以是真的) public string Transform(string s) { return s.Replace(“_”,” “); } 我可以在反序列化后手动改变我的poco ,但是想知道什么是“更干净”的方法?

反序列化递归JSON对象

我有一个表示查询表达式的递归JSON对象: { “where”: { “operator”: “AND”, “left”: { “operator”: “=”, “$fieldRef”: “requestor”, “value”: “@me” }, “right”: { “operator”: “=”, “$fieldRef”: “state”, “value”: “Closed” } } } 更多对象也可以出现在JSON层次结构中。 这是一个更复杂的例子: { “where”: { “operator”: “OR”, “left”: { “operator”: “=”, “$fieldRef”: “id”, “value”: “1234” }, “right”: { “operator”: “OR”, “left”: { “operator”: “=”, “$fieldRef”: “orgId”, “value”: “6757” }, […]

在反序列化JSON String期间处理名称空间更改

我有2个应用程序在redis服务器的帮助下相互通信,在我的第一个应用程序中,我能够序列化和反序列化以及以下类型的对象 { “$type”: “System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib], [OPCMessagingService.Resource, OPCMessagingService]], mscorlib”, “71”: { “$type”: “OPCMessagingService.Resource, OPCMessagingService”, “SiteID”: 2, “ResourceID”: 71, “ProcessOrder”: “001000380873”, “CurrentStatus”: 0, “CycleTime”: 55, “DeviceList”: [ { “$type”: “OPCMessagingService.StackLight, OPCMessagingService”, “ResourceId”: 71, “DeviceIp”: “10.142.117.7”, “ComPort”: “COM14” }, { “$type”: “OPCMessagingService.LED, OPCMessagingService”, “ResourceId”: 71, “DeviceIp”: “10.142.117.3”, “ComPort”: “COM10”, “IsMessageDelivered”: false, “RetryCount”: 3, “IsRetryRequired”: true, “_messageHeader”: “:*HF601011471”, “_messageText”: […]

以适当的类型从JsonConvert.SerializeXNode返回json

var test = new { TestStr = “test”, TestNumber = 123, TestDate = new DateTime(1986, 1, 13, 17, 50, 31), TestBool = true }; var xml = JsonConvert.DeserializeXNode(JsonConvert.SerializeObject(test), “test”); 这段代码返回了很好的xml元素: 1986-01-13T14:50:31Z true 123 test 当我尝试将此xml转换回JSON时 : var json = JsonConvert.SerializeXNode(xml, Formatting.None, true); 我只使用String属性获取JSON。 我该怎么做才能让json得到合适的类型?

Json.net无法加载属于类对象的某些属性?

注意:我正在添加此社区wiki条目以节省某人我刚刚调试此问题所花费的时间。 我有一个具有多个公共属性的类对象。 我可以使用JSON.net将其序列化。 但是当我加载JSON文本并使用JsonConvert.DeserializeObject对其进行反序列化时,如果在序列化时它们肯定具有有效值,则某些字段将设置为NULL 。 我手动检查了序列化的JSON字符串,我肯定会在文本中看到NULL属性的值。 为什么会这样?

json.net反序列化从项目资源加载json时抛出exception

这是产生问题的反序列化: public MyType ProblematicDeserialization(jsonString) { return Newtonsoft.Json.JsonConvert.DeserializeObject(jsonString); } 它的工作方式还是没有关于如何加载jsonString的方法: 情况1: myObjectType使用json.net作为字符串序列化,然后写入filePath : //This line works correctly: dynamic correctlyWorkingJson = IO.File.ReadAllText(filePath, Text.Encoding.UTF8); 案例2 与CASE 1相同,但filePath的内容已被复制,然后粘贴到我的项目中的json资源中: //This line gives an ERROR: “”Unexpected character encountered while parsing value: . Path ”, line 0, position 0.” dynamic notWorkingJson = GetJsonFromResource(resourceName); private string GetJsonFromResource(string resourceName) { byte[] jsonBytes = Convert.ToByte(ResourcesManager.GetResource(resourceName)); […]

如何反序列化包含转义的JSON字符串的属性?

我有一个API的application/json响应,它有一个属性,本身包含一个转义的JSON字符串。 { “id”: 0, “aggregation_id”: “533741f4-49da-4db9-9660-4ca7bafb30e1”, “task_id”: “217”, “event_type”: “discovery”, “event_name”: “device_discovery_complete”, “method”: “ssh”, “message_details”: “{\”aggregation_id\”:\”533741f4-49da-4db9-9660-4ca7bafb30e1\”,\”ou_id\”:0,\”device_id\”:13,\”node_id\”:13,\”task_id\”:217}”, “time”: “2018-01-25T17:59:25” } 我想将对象和内部对象反序列化为模型类型。 public class Response { public DateTime time {get; set;} public string event_name {get; set;} public string event_type {get; set;} public string method {get; set;} public MessageDetails message_details {get; set;} } public class MessageDetails { public […]

我应该为TextBox控件的序列化数据指定哪种编码

假设我的WinForms应用程序中有一个TextBox 。 当用户单击按钮时,应用程序应通过TCP发送存储在此TextBox的序列化值。 对于序列化我正在使用Newtonsoft.Json库,如下所示: string json = JsonConvert.SerializeObject(credentials); 其中credentials是保存TextBox值的类的对象。 然后我需要通过TcpClient类通过网络发送它: TcpClient client = new TcpClient(IpAddress, Port); NetworkStream stream = client.GetStream(); // ??? 但我需要先将json字符串转换为字节数组,所以我必须指定一个文本编码。 我应该指定哪种文本编码非常安全? 我不能只将它设置为ASCII,因为用户可以输入unicode字符。

在一个程序集中序列化,在另一个程序集中反序列化?

我在两个项目中有相同的类,一个在runtime被发送到另一个进程,该进程必须反序列化该对象并使用它(假设两个对象相同但程序集名称不同,因此它们实际上被解释为两个不同种类)。 根据我的研究,我得出的解决方案由于以下原因而无效。 Json.NET :给我一个例外,即两种类型不兼容(尝试在序列化设置中使用typename.all)。 protobuf-net :要求我在每个地方添加属性或者只是为它提供属性名称(在v2中),由于我的对象太复杂,这对我来说都是不可能的。 BinaryFormatter :与protobuf->吨属性相同的原因。 Use Common Assembly :由于某些与我的项目架构相关的原因,我不能。 那么是否有任何简单的方法来序列化一种类型,然后将其反序列化为另一种类型(实际上是同一个类但在不同的程序集中)?