Tag: json

安装Reactive Extensions后使用Newtonsoft Json和动态时的RuntimeBinderException

我使用以下代码: public async Task LoginAsync(string username, string password) { //removed irrelevant code from snippet var response = await JSonConvert.DeSerializeObjectAsync(responseText); return (response.success == SUCCESS ? response.data.sid : String.Empty); } 在我通过NuGet安装Reactive Extensions之前,这一点很有用。 从该方法的最后一行开始,只需抛出一个RuntimeBinderException : {“’Newtonsoft.Json.Linq.JObject’不包含’成功’的定义”} 现在让它运行的唯一方法是使用它: return (response[“success”].ToString() == SUCCESS ? response[“data”][“sid”].ToString() : String.Empty); 我尝试了另一个JSon库(JsonFX2.0),但我也得到了一个RuntimeBinderException: {“’ExpandoObject’不包含’成功’的定义”} 服务返回的json看起来像这样: { “data”: { “sid”: “sK7gyGm1kfEUc” }, “success”: true } 我已经尝试删除Reactive […]

C# – 动态添加对象(添加动态属性名称)

我正在尝试创建一些动态的ExpandoObject 。 我遇到了一个问题。 由于我不知道我的对象中这些不同属性的名称应该是什么,我不能这样做: var list = new ArrayList(); var obj = new ExpandoObject(); obj.ID = 1, obj.Product = “Pie”, obj.Days = 1, obj.QTY = 65 list.Add(obj); 让我解释一下我的情况:我希望从随机数据库中获取数据(我不知道哪个,但是根据我从UI获得的信息构建连接字符串),因此我不知道需要获取哪些数据。 这可能是数据库表的一个例子 表销售 ID:int, 产品:nvarchar(100), 天:int, 数量:bigint 这可能是另一个例子: 表Foobar Id:int, 天:int 数量:bigint Product_Id:int Department_Id:int 如您所见,我不知道数据库的外观(这是100%匿名,因此它需要100%动态),我想要返回的数据应该看起来像一个构造良好的JSON,如下所示: [ { “ID”: 1, “Product”: “Pie” “Days”: 1, “QTY”: 65 }, { “ID”: […]

如何在不知道Key值的情况下读取Json数据

我有一个json数据作为输入字符串。 现在我需要用输入的Json数据更新现有的Json数据。 在我的例子中,我希望遍历每个键并与现有的Json数据匹配,然后使用输入的Json数据更新该Key的值 。 用于检索现有数据的代码 var existingJSon = ProductRepository.ListOfProd.Cast().Where(x => x[“ProdId”].ToString() == id.ToString()); 检索数据后,我现有的Json将如下所示。 { ProdId:”1″, Title:”C#”, Author:”Jeffy”, Publisher:”XYZ”, Category:”Microsoft” } 现在我需要遍历作为输入的每个键并匹配现有的Json键并更新该键的值。 输入和更新后它应如下所示: { ProdId:”1″, Title:”C#”, Author:”Jeffy”, Publisher:”abcd”, Category:”Microsfot Basic .Net Development Kit” }

json.net将字符串反序列化为嵌套类

我从http请求中收到一个Json字符串,看起来像这样: { “info”: [ { “calls”:0, “errors”:”[error1, error2, error3]”, “messages”:0, “mail”:3 } ], “received”:5, “valid”:3 } 我正在尝试反序列化的实体的结构大致相同 class ResponseEntity { private Info info; private int received; private int valid; [JsonProperty(“info”)] public Info Info { get { return info; } set { info = value; } } [JsonProperty(“valid”)] public int valid { get { return valid; […]

没有为类型定义的序列化程序:System.Windows.Media.Media3D.Point3D

我正在尝试使用protobuf net序列化一些数据。 在序列化期间,我收到一个错误,没有为Point3D类型定义序列化。 我发现了一个像这样的问题,但仍然无法实现和解决它。 链接如下: – 没有为类型定义的序列化程序:System.Drawing.Color [ProtoContract] public class ReturnPanelData { [ProtoMember(1)] public Point3D PlacedPoint3D { get; set; } [ProtoMember(2)] public double PlacementAngle { get; set; } [ProtoMember(3)] public string PanelName { get; set; } } [ProtoContract] public class ReturnDataType { [ProtoMember(1)] public List ReturnList { get; set; } [ProtoMember(2)] public double RemainderArea { […]

在jQuery和MVC Controller Actions之间传递非结构化JSON

关于MVC模型绑定有很多有用的信息。 我的问题源于这样一个事实:我试图避免在我的MVC应用程序中创建强类型数据,因为它主要需要充当数据路由器。 基本上,我在页面上有一组字段,有一个类’input’,我可以用jQuery(‘.input’)收集,迭代并填充到javascript对象中。 然后我将它发送到我的ASP.NET MVC控制器: var inputData = my_serialize( $(‘input’); $.ajax({ type:’POST’, url: ‘/acme/Ajax/CaptureInput’, dataType: “json”, data: { inputData: JSON.stringify(inputData) }, success: Page_Response_RegisterAndDeposit, error: Page_AjaxError }); 在C#方面,我有 public JsonResult CaptureInput(string inputDataAsJsonString) { JavaScriptSerializer JSON = new JavaScriptSerializer(); object inputData = JSON.DeserializeObject(inputDataAsJsonString); 这似乎是一个浪费的间接层,我更喜欢将数据作为contentType:application / json传递,并让CaptureInput接受一个object或IDictionary甚至dynamic 。

解析具有不一致字段名称的JSON字符串

我在反序列化以下JSON结构时遇到问题。 每个节点都包含一个ID和带有值的多语言代码。 语言属性的数量不一致。 但我需要这些值作为具有语言字段和值字段的对象列表。 [{ “id”:”w_312457″, “eng”:”deep-fat frying”, “ger”:”Frittieren” }, { “id”:”w_312458″, “fre”:”frying”, “ger”:”braten (in Öl)” }, { “id”:”w_312477″, “ger”:”perfekt gewürzte und abgestimmte Soße ” }] 我尝试使用JsonPropertyName属性,我得到了ID值。 但对于lang节点,我不知道我可以指定的名称。 以下是我的CLR对象, public class Word { public string Id { get; set; } // This is working // What can I specify here. I need a list of […]

如何使用c#检测包含尾随逗号的无效JSON?

是的,是的,我知道有无数关于检测无效Json的post。 他们都说同样的事情:尝试解析或反序列化对象。 你猜怎么着? 在这种情况下,Json.NET愉快地解析我的格式错误的JSON并且不抱怨。 我想我需要澄清一下:我的JSON唯一不对的是数组中的尾随逗号。 以下说明了我的问题: string badJson = “{ ‘array’ : [ {‘objName1’ : ‘value1’}, {‘objName2’ : ‘value2’}, {‘objName3’ : ‘value3’}, ] }”; var obj = JObject.Parse(badJson); JSON在浏览器中无效,因为它在数组中有一个尾随逗号,但它很高兴被解析为一个jobject。 由于我实际上无法使用序列化来检测这个问题,我该怎么办? 请注意,我已经尝试序列化到一个对象,产生相同的结果。 更新: 以下代码将正确检测逗号并将其删除,以防任何人需要执行此操作: var regex = new Regex(@”(.*?),\s*(\}|\])”,(RegexOptions.Multiline)); var cleanJson = regex.Replace(content, m => String.Format(“{0} {1}”,m.Groups[1].Value,m.Groups[2].Value)); 另一种可能的解决方案是将.NET Json解析器与我的对象模型一起使用。 另一个对我有用的解决方案是将对象解析为Jobject,然后再次序列化。 这让我可以在需要的地方使用Json。 这比上面的正则表达式慢得多,所以我最终使用了正则表达式。

RestSharp序列化/反序列化命名转换

我正在尝试使用RestSharp包装Plivo API( 是的,我知道它已经完成 )。 但是,我找不到将API命名约定转换为我自己的方法,例如: “呼叫”( https://www.plivo.com/docs/api/call/#make-an-outbound-call )至少需要: to , from和answer_url参数。 这些参数也区分大小写。 我希望能够提供一个CallRequest类,包装我首选命名约定中所需的数据,然后以某种方式在RestSharp序列化之前转换它们。 例: public class CallRequest { /// /// The phone number to be used as the caller id (with the country code).For eg, a USA caller id number could be, 15677654321, with ‘1’ for the country code. /// public string From { get; […]

如何将以下JSON传递给C#补丁方法w或没有Javascript序列化程序

我正在开发一个程序来访问Visual Studio Team Services的REST API(是Visual Studio Online)。 我关注https://www.visualstudio.com/integrate/api/wit/work-items 我能够通过使用以下代码片段传递正确的ID来查询工作项: var uri = new Uri(“https://{instance}.visualstudio.com/DefaultCollection/_apis/wit/workitems/7?api-version=1.0”); GetWorkItem(uri); public static async void GetWorkItem(Uri uri) { try { var username = “my username”; var password = ” my pass word”; using (HttpClient client = new HttpClient()) { client.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue(“application/json”)); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(“Basic”, Convert.ToBase64String( ASCIIEncoding.ASCII.GetBytes( string.Format(“{0}:{1}”, username, password)))); […]