Tag: json

IIS上托管的WCF服务无法正常工作

我想构建一个公开basicHTTP端点和webHTTP端点的服务。 如果我在运行模式下用VS2010测试以下项目,一切都很好; 但我想在IIS(本地或远程)和测试通过主机服务。 Service.svc: 我将我的网站托管到本地IIS。 当我尝试: http://localhost/ContactLibrary2.0/Service.svc我得到: 无法找到“ContactLibrary.ContactLibraryService”类型,作为ServiceHost指令中的Service属性值提供,或者在配置元素system.serviceModel / serviceHostingEnvironment / serviceActivations中提供。 Web.config看起来像: IContact看起来像: [ServiceContract] public interface IContact { [OperationContract] [WebInvoke(Method = “GET”, UriTemplate = “GetContact/{idContact}”, ResponseFormat = WebMessageFormat.Json)] Contact GetContact(string idContact); [OperationContract] [WebInvoke(Method = “POST”, UriTemplate = “AddContact”, RequestFormat = WebMessageFormat.Json)] string AddContact(Contact contact); [OperationContract] [WebInvoke(Method = “POST”, UriTemplate = “EditContact”, RequestFormat = WebMessageFormat.Json, […]

根据C#中的条件从JSON中删除元素

我有一个JSON字符串,我希望能够在C#中修改。 我希望能够基于其中一个子值是特定值来删除一组数据。 请采取以下措施 { “responseHeader”:{ “status”:0, “QTime”:0, “params”:{ “explainOther”:””, “fl”:”*,score”, “indent”:”on”, “start”:”0″, “q”:”*:*”, “hl.fl”:””, “qt”:””, “wt”:”json”, “fq”:””, “version”:”2.2″, “rows”:”2″} }, “response”:{“numFound”:2,”start”:0,”maxScore”:1.0,”docs”: [{ “id”:”438500feb7714fbd9504a028883d2860″, “name”:”John”, “dateTimeCreated”:”2012-02-07T15:00:42Z”, “dateTimeUploaded”:”2012-08-09T15:30:57Z”, “score”:1.0 }, { “id”:”2f7661ae3c7a42dd9f2eb1946262cd24″, “name”:”David”, “dateTimeCreated”:”2012-02-07T15:02:37Z”, “dateTimeUploaded”:”2012-08-09T15:45:06Z”, “score”:1.0 }] }} 上面显示了两个响应结果。 我希望能够在其子“id”值匹配时删除整个父响应结果组,例如,如果我的id是“2f7661ae3c7a42dd9f2eb1946262cd24”,我希望删除第二组,因此我的结果将如下所示。 { “responseHeader”:{ “status”:0, “QTime”:0, “params”:{ “explainOther”:””, “fl”:”*,score”, “indent”:”on”, “start”:”0″, “q”:”*:*”, “hl.fl”:””, “qt”:””, “wt”:”json”, “fq”:””, “version”:”2.2″, “rows”:”2″}}, “response”:{“numFound”:2,”start”:0,”maxScore”:1.0,”docs”:[ […]

C#Web API POST参数FromBody始终为null

我已经在网上搜了好几个小时,并尝试了StackOverflow上描述的许多不同的解决方案。 我之前已经问过类似的问题,但没有一个答案或评论对我有用。 问题:我有一个.NET Web API,它有一个带有一些参数的Post方法。 其中一个参数是一个复杂的对象,应该从正文中读取(即JSON)。 但是,此对象始终为null 。 这是我的代码: // POST api/worksheets/post_event/true/false [Route(“post_event/{newWorksheet}/{eindEvent}”)] [HttpPost] public Event Post(bool newWorksheet, bool eindEvent, [FromBody] Event eventData) { return eventData; } 要明确:eventData是始终为null的对象。 布尔值被正确读取。 完整的请求正文是: POST http://localhost:5000/api/worksheets/post_event/true/false Content-Type: application/json {“Persnr”:1011875, “WorksheetId”:null, “Projectnr”:81445, “Uursoort”:8678, “Tijd”:{“09-08-2016 9:25”}} 作为参考,这是Event-class: public class Event { public long Persnr { get; set; } public int WorksheetId […]

ASP.NET JavaScriptSerializer需要HttpResponse吗?

似乎System.Web.Script.Serialization.JavascriptSerializer类尝试获取当前请求的HttpResponse,可能是为了应用适当的字符编码。 但是,这意味着当您要在范围内使用没有HttpContext的类时,它会出现以下exception+堆栈跟踪: [HttpException (0x80004005): Response is not available in this context.] System.Web.HttpContext.get_Response() +8753496 System.Web.Util.HttpEncoder.get_Current() +39 System.Web.HttpUtility.JavaScriptStringEncode(String value, Boolean addDoubleQuotes) +13 System.Web.Script.Serialization.JavaScriptSerializer.SerializeString(String input, StringBuilder sb) +31 System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat) +240 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat) +1355 System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, […]

将某个JSON值映射到枚举值C#

我正在为Stack Exchange API创建类。 filter_object类型包含成员filter_type ,该成员将是safe , unsafe或invalid 。 所以我创建了一个这样的枚举: [JsonConverter(typeof(StringEnumConverter))] public enum FilterType { safe, @unsafe, // Here lies the problem. invalid } 由于unsafe是一个关键字,我不得不为它添加一些前缀。 但是,如何使值“不安全”自动映射到@unsafe ? 示例JSON: { “filter”: “….”, “filter_type”: “unsafe”, “included_fields”: [ “…”, “….”, “…..” ] } 如何反序列化,以便filter_type自动转换为FilterType.@unsafe ? 更新 – 解决: 在标识符之前使用@符号可以使其与关键字相同。 即使@出现在intellisense中,它也能正常工作。

带数字键的动态json对象

我有一个json对象,我在这个答案的帮助下转换为动态C#对象。 它工作得很好,但麻烦的是这个对象有数字键。 例如, var jsStr = “{address:{“100″: {…}}}”; 所以我不能这么做 dynObj.address.100 而且,据我所知,我不能使用索引器来获取这样的对象 dynObj.address[“100”] 请向我解释如何让这个工作。

POST StreamContent与多个文件

下面的代码片段成功地将单个文件HttpPost到WebAPI。 我想扩展它以构建包含多个文件的StreamContent(类似于Fiddler多文件post)。 我知道我应该为StreamContent添加一个“边界”,但我不确定究竟在哪里。 我想最终将FileStream / Stream参数转换为List,这样我就可以遍历集合并将StreamContent构建为POST。 如果这篇文章有任何意义,请告诉我。 我很感激任何建议。 提前致谢! public async Task UploadOrderFile(FileStream imageFileStream, string filename, string contentType = “image/png”) { JsonApiClient._client.DefaultRequestHeaders.Clear(); var content = new MultipartFormDataContent { JsonApiClient.CreateFileContent(imageFileStream, filename, contentType) }; JsonApiClient._client.DefaultRequestHeaders.Add(“Authorization”, ” Bearer ” + JsonApiClient.Token.AccessToken); var response = await JsonApiClient._client.PostAsync(“api/UploadFile”, content); response.EnsureSuccessStatusCode(); return response.StatusCode; } internal static StreamContent CreateFileContent(Stream stream, string fileName, […]

反序列化动态JSON文件C#NewtonSoft.JSON

正在进行反序列化动态JSON文件,该文件可能包含2个单独的类,我不知道数组中将包含哪种类型的数据。 问题是,我将根对象反序列化为“Base”类型,“subtests”对象被反序列化为“Subtest”,但“subtests”数组可以是“Base”类型或“Subtest”类型。 问题:我如何以编程方式确定如果对象包含“subtest”,我将反序列化为Base,如果不包含,则应将其反序列化为“Subtest”? 因为我的时间很短,所以我非常感谢这方面的帮助。 (编辑:添加注释以显示每个对象应反序列化的类型)以下是一个示例(JSON DATA): { // Deserializes to type “Base” “host”: “123456”, “last_time”: “2014-09-15 07:04:49.205000”, “name”: “myName”, “result”: “FAIL”, “serial”: “12345”, “start_time”: “2014-09-15 06:53:36.976000”, // Deserializes to type “List” “subtests”: [ { “data”: { “moredata”: { “ver”: “123”, “real”: 123 } }, “description”: “Description of Data”, “host”: “123456”, “last_time”: “2014-09-15 20:32:31.095000”, “name”: “testname.py”, […]

如何使用Newtonsoft反序列化可以是数组或字典的对象?

我正在使用一个API来返回我需要反序列化的json对象。 我的问题是这些对象的一个​​成员有时是一个空数组(“[]”),有时是一个字典(“{”1“:{…},”2“:{…}}” )。 我想将它反序列化为数组或字典,因为我不关心ID,我只想要所有对象的列表。 这是我如何反序列化对象: var response = JsonConvert.DeserializeObject(json); 这是Response类的定义: public class Response { [JsonProperty(PropertyName = “variations”)] public Dictionary Variations { get; set; } } 当Response在其变体字段中包含字典时它很有效,但是当它包含一个空数组时它会失败。 我从Newtonsoft得到一个错误,说数组不能被反序列化为字典。 如果我将Variations属性定义为数组,它适用于空数组,但是当它是字典时它会失败。 我可以做什么来正确地反序列化两个可能的值,或者忽略空数组并将Variations设置为null,当它是一个数组而不是失败时。 谢谢。

分割大型JSON文件的策略

我正在尝试将非常大的JSON文件拆分为给定数组的较小文件。 例如: { “headerName1”: “headerVal1”, “headerName2”: “headerVal2”, “headerName3”: [{ “element1Name1”: “element1Value1” }, { “element2Name1”: “element2Value1” }, { “element3Name1”: “element3Value1” }, { “element4Name1”: “element4Value1” }, { “element5Name1”: “element5Value1” }, { “element6Name1”: “element6Value1” }] } …向下到{“elementNName1”:“elementNValue1”}其中N是一个大数字 用户提供表示要拆分的数组的名称(在此示例中为“headerName3”)和每个文件的数组对象数,例如1,000,000 这将导致N个文件各自包含顶部名称:值对(headerName1,headerName3)和每个文件中最多1,000,000个headerName3对象。 我正在使用优秀的Newtonsof JSON.net,并了解我需要使用流来完成此操作。 到目前为止,我已经查看了JToken对象中的一个读数,以确定在读取标记时PropertyName ==“headerName3”的位置,但我想要做的是在整个JSON对象中读取数组中的每个对象而不是继续将JSON解析为JTokens; 这是我到目前为止构建的代码片段: using (StreamReader oSR = File.OpenText(strInput)) { using (var reader = new JsonTextReader(oSR)) { while […]