How to fix json error Expecting 'STRING', got '}' [closed] - c#

Closed. This question needs debugging details. It is not currently accepting answers.
Edit the question to include desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem. This will help others answer the question.
Closed 3 years ago.
Improve this question
This is my string that I believe to be json output. I am getting
Expecting 'STRING', got '}'.
Can anyone help me to resolve this please?
{
"shipToAddress": {
"type": "ST",
"recordId": "ST",
"locationNumber": "",
"companyName1": "",
"companyName2": "",
"address1": "",
"address2": "",
"address3": "",
"address4": "",
"city": "",
"state": "",
"postalCode": "",
"country": "",
"dunsNumber": "",
"dunsType": "",
"contactPhone": "",
"contactEmail": "",
"contactFax": "",
"contactOther": "",
"locationCode": "",
"consolidator": ""
},
"shipFromAddress": {
"type": "ST",
"recordId": "ST",
"locationNumber": "",
"companyName1": "",
"companyName2": "",
"address1": "",
"address2": "",
"address3": "",
"address4": "",
"city": "",
"state": "",
"postalCode": "",
"country": "",
"dunsNumber": "",
"dunsType": "",
"contactPhone": "",
"contactEmail": "",
"contactFax": "",
"contactOther": "",
"locationCode": "",
"consolidator": ""
},
"addresses": [
{
"type": "ST",
"recordId": "ST",
"locationNumber": "",
"companyName1": "",
"companyName2": "",
"address1": "",
"address2": "",
"address3": "",
"address4": "",
"city": "",
"state": "",
"postalCode": "",
"country": "",
"dunsNumber": "",
"dunsType": "",
"contactPhone": "",
"contactEmail": "",
"contactFax": "",
"contactOther": "",
"locationCode": "",
"consolidator": ""
}
],
"orders": [
{
"recordId": "3",
"poNumber": "0006630041",
"items": [
{
"itemComponents": [
{
"itemNotes": [
{
"recordId": "",
"type": "",
"note": ""
}
],
"recordId": "3",
"lineNo": "3",
"sublineNo": "3",
"originalLineNo": "3",
"qty": 0,
"unitMeasure": "EA",
"upcCode": "",
"vendorNumber": "",
"unitSize": "42",
"itemColor": "BLK/RED",
"customerItem": "",
"gtinNumber": "",
"upcCaseCode": "",
"prepackCode": "",
"caseGroupCode": "",
"skuNumber": "",
"unitPrice": "405.46",
"priceBasis": "",
"sellingPrice": 995,
"discountPercent": 0,
"shipDate": 060419,
"packSize": 1,
"inners": 1,
"itemDesc": "",
"itemWeight": "",
"itemReferenceId": 0,
"lotNumber": "",
"nrfSize": "",
"nrfColor": "",
"nrfDesc": "",
"unitSizeBuyer": "",
"itemColorBuyer": "",
"buyerStyleNo": "",
"countryOfOrigin": "",
"ticketType": "",
"mfgName": "",
"mfgCity": "",
"mfgCountry": ""
}
],
"recordId": "",
"lineNo": "",
"sublineNo": "",
"originalLineNo": "",
"qty": 0,
"unitMeasure": "EA",
"upcCode": "",
"vendorNumber": "",
"unitSize": "",
"itemColor": "",
"customerItem": "",
"gtinNumber": "",
"upcCaseCode": "",
"prepackCode": "",
"caseGroupCode": "",
"skuNumber": "",
"unitPrice": "",
"priceBasis": "",
"sellingPrice": 0,
"discountPercent": 0,
"shipDate": 0,
"packSize": 0,
"inners": 0,
"itemDesc": "",
"itemWeight": "",
"itemReferenceId": 0,
"lotNumber": "",
"nrfSize": "",
"nrfColor": "",
"nrfDesc": "",
"unitSizeBuyer": "",
"itemColorBuyer": "",
"buyerStyleNo": "",
"countryOfOrigin": "",
"ticketType": "",
"mfgName": "",
"mfgCity": "",
"mfgCountry": "",
"extItemRef": "",
"custFld01Nam": "",
"custFld01Val": "",
"custFld02Nam": "",
"custFld02Val": "",
"custFld03Nam": "",
"custFld03Val": "",
"qtyShip": 0,
"qtyRemain": 0,
"itemPackCode": "",
"itemDimensionLength": 0,
"itemDimensionWidth": 0,
"itemDimensionHeight": 0,
"itemDimensionUom": "",
"cartonLenght": 0,
"cartonWidth": 0,
"cartonHeight": 0,
"cartonUom": "",
"itemStatus": "AC",
"statusReason": "backorder_cancel",
"statusDesc": "",
"qtyBackorder": 0,
"backorderDate": 0
},
{
"recordId": "4",
"poNumber": "0006630041",
"items": [
{
"itemComponents": [
{
"itemNotes": [
{
"recordId": "",
"type": "",
"note": ""
}
],
"recordId": "4",
"lineNo": "4",
"sublineNo": "4",
"originalLineNo": "4",
"qty": 0,
"unitMeasure": "EA",
"upcCode": "",
"vendorNumber": "",
"unitSize": "43",
"itemColor": "BLK/RED",
"customerItem": "",
"gtinNumber": "",
"upcCaseCode": "",
"prepackCode": "",
"caseGroupCode": "",
"skuNumber": "",
"unitPrice": "405.46",
"priceBasis": "",
"sellingPrice": 995,
"discountPercent": 0,
"shipDate": 060419,
"packSize": 1,
"inners": 1,
"itemDesc": "",
"itemWeight": "",
"itemReferenceId": 0,
"lotNumber": "",
"nrfSize": "",
"nrfColor": "",
"nrfDesc": "",
"unitSizeBuyer": "",
"itemColorBuyer": "",
"buyerStyleNo": "",
"countryOfOrigin": "",
"ticketType": "",
"mfgName": "",
"mfgCity": "",
"mfgCountry": ""
}
],
"recordId": "",
"lineNo": "",
"sublineNo": "",
"originalLineNo": "",
"qty": 0,
"unitMeasure": "EA",
"upcCode": "",
"vendorNumber": "",
"unitSize": "",
"itemColor": "",
"customerItem": "",
"gtinNumber": "",
"upcCaseCode": "",
"prepackCode": "",
"caseGroupCode": "",
"skuNumber": "",
"unitPrice": "",
"priceBasis": "",
"sellingPrice": 0,
"discountPercent": 0,
"shipDate": 0,
"packSize": 0,
"inners": 0,
"itemDesc": "",
"itemWeight": "",
"itemReferenceId": 0,
"lotNumber": "",
"nrfSize": "",
"nrfColor": "",
"nrfDesc": "",
"unitSizeBuyer": "",
"itemColorBuyer": "",
"buyerStyleNo": "",
"countryOfOrigin": "",
"ticketType": "",
"mfgName": "",
"mfgCity": "",
"mfgCountry": "",
"extItemRef": "",
"custFld01Nam": "",
"custFld01Val": "",
"custFld02Nam": "",
"custFld02Val": "",
"custFld03Nam": "",
"custFld03Val": "",
"qtyShip": 0,
"qtyRemain": 0,
"itemPackCode": "",
"itemDimensionLength": 0,
"itemDimensionWidth": 0,
"itemDimensionHeight": 0,
"itemDimensionUom": "",
"cartonLenght": 0,
"cartonWidth": 0,
"cartonHeight": 0,
"cartonUom": "",
"itemStatus": "AC",
"statusReason": "backorder_cancel",
"statusDesc": "",
"qtyBackorder": 0,
"backorderDate": 0
},
{
"recordId": "5",
"poNumber": "0006630041",
"items": [
{
"itemComponents": [
{
"itemNotes": [
{
"recordId": "",
"type": "",
"note": ""
}
],
"recordId": "5",
"lineNo": "5",
"sublineNo": "5",
"originalLineNo": "5",
"qty": 0,
"unitMeasure": "EA",
"upcCode": "",
"vendorNumber": "",
"unitSize": "44",
"itemColor": "BLK/RED",
"customerItem": "",
"gtinNumber": "",
"upcCaseCode": "",
"prepackCode": "",
"caseGroupCode": "",
"skuNumber": "",
"unitPrice": "405.46",
"priceBasis": "",
"sellingPrice": 995,
"discountPercent": 0,
"shipDate": 060419,
"packSize": 1,
"inners": 1,
"itemDesc": "",
"itemWeight": "",
"itemReferenceId": 0,
"lotNumber": "",
"nrfSize": "",
"nrfColor": "",
"nrfDesc": "",
"unitSizeBuyer": "",
"itemColorBuyer": "",
"buyerStyleNo": "",
"countryOfOrigin": "",
"ticketType": "",
"mfgName": "",
"mfgCity": "",
"mfgCountry": ""
}
],
"recordId": "",
"lineNo": "",
"sublineNo": "",
"originalLineNo": "",
"qty": 0,
"unitMeasure": "EA",
"upcCode": "",
"vendorNumber": "",
"unitSize": "",
"itemColor": "",
"customerItem": "",
"gtinNumber": "",
"upcCaseCode": "",
"prepackCode": "",
"caseGroupCode": "",
"skuNumber": "",
"unitPrice": "",
"priceBasis": "",
"sellingPrice": 0,
"discountPercent": 0,
"shipDate": 0,
"packSize": 0,
"inners": 0,
"itemDesc": "",
"itemWeight": "",
"itemReferenceId": 0,
"lotNumber": "",
"nrfSize": "",
"nrfColor": "",
"nrfDesc": "",
"unitSizeBuyer": "",
"itemColorBuyer": "",
"buyerStyleNo": "",
"countryOfOrigin": "",
"ticketType": "",
"mfgName": "",
"mfgCity": "",
"mfgCountry": "",
"extItemRef": "",
"custFld01Nam": "",
"custFld01Val": "",
"custFld02Nam": "",
"custFld02Val": "",
"custFld03Nam": "",
"custFld03Val": "",
"qtyShip": 0,
"qtyRemain": 0,
"itemPackCode": "",
"itemDimensionLength": 0,
"itemDimensionWidth": 0,
"itemDimensionHeight": 0,
"itemDimensionUom": "",
"cartonLenght": 0,
"cartonWidth": 0,
"cartonHeight": 0,
"cartonUom": "",
"itemStatus": "AC",
"statusReason": "backorder_cancel",
"statusDesc": "",
"qtyBackorder": 0,
"backorderDate": 0
}
],
"cartons": [
{
"pack": [
{
"lineNo": 0,
"qtyPack": 0
}
],
"recordId": "35210369",
"cartonCode": "",
"cartonQty": 0,
"palletId": 0,
"cartonWeight": 0,
"cartonLength": 0,
"cartonWidth": 0,
"cartonHeight": 0,
"cartonUom": "",
"cartonGroupCode": "",
"packSlipNumber": "",
"trackingNumber": ""
}
],
"billToAddress": {
"type": "BT",
"recordId": "BT",
"locationNumber": "",
"companyName1": "",
"companyName2": "",
"address1": "",
"address2": "",
"address3": "",
"address4": "",
"city": "",
"state": "",
"postalCode": "",
"country": "",
"dunsNumber": "",
"dunsType": "",
"contactPhone": "",
"contactEmail": "",
"contactFax": "",
"contactOther": "",
"locationCode": "",
"consolidator": ""
},
"remitToAddress": {
"type": "RE",
"recordId": "RE",
"locationNumber": "",
"companyName1": "",
"companyName2": "",
"address1": "",
"address2": "",
"address3": "",
"address4": "",
"city": "",
"state": "",
"postalCode": "",
"country": "",
"dunsNumber": "",
"dunsType": "",
"contactPhone": "",
"contactEmail": "",
"contactFax": "",
"contactOther": "",
"locationCode": "",
"consolidator": ""
},
"location": "0689",
"shipToLocation": "",
"releaseNumber": "",
"contractNumber": "",
"poType": "",
"poCategory": "",
"customerOrderNumber": "",
"customerOrderRef": "",
"promoteCode": "",
"salesOrderNumber": "",
"customerAccount": "",
"buyerAccount": "",
"buyerEmail": "",
"vendor": "",
"vendorNumberAp": "30",
"poDate": 0,
"requestedDeliveryDate": 0,
"departmentNumber": "0149",
"departmentDescription": "",
"invoiceNumber": "SI19-000001",
"invoiceDate": 20190528,
"detailLineCount": 0,
"orderCartons": 0,
"orderWeight": 0,
"orderVolume": 0
}
],
"pallets": [
{
"recordId": "",
"palletId": 0,
"palletCode": "",
"palletType": "1",
"cartonCount": 0,
"palletWeight": 0,
"totalWeight": 0,
"weightUom": "",
"palletLength": 0,
"palletWidth": 0,
"palletHeight": 0,
"palletUom": "",
"palletTiers": 0,
"palletBlocks": 0,
"packSize": 0,
"inners": 0
}
],
"appointmentNumber": "",
"billOfLading": "",
"carrierCode": "",
"carrierCustom": 0,
"carrierService": "CX",
"contactEmail": "",
"contactFax": "",
"contactName": "",
"contactPhone": "",
"containerCarrierCode": "",
"containerType": "2B",
"custWhsNumber": "",
"deliveryDate": 20190528,
"externalId": "",
"fobCode": "CC",
"fobLocation": "OR",
"fobText": "",
"importHandlingCode": "",
"importLocCode": "",
"importLocType": "",
"importUnLocCode": "",
"importVesselName": "",
"importVoyageNumber": "",
"masterBillOfLading": "",
"packCodeContainer": "",
"packCodeMaterial": "",
"proNumber": "",
"routingInstructions": "",
"sealNumber": "",
"shipDate": 20190528,
"shipmentId": "SH19-000001",
"shipMode": "",
"shipTime": "",
"tagId": 0,
"trailerNumber": "",
"transitTime": "",
"transitTimeType": "",
"transportTermsCode": "",
"transportTermsQual": "",
"vendor": "",
"vendorNumberAp": "30"
}

After looking at the data, it looks like their are two problems.
Your collection of orders and items are not closed.
The main json object is not closed.
Let's start with the Order and Item collection:
The item collection in the order with recordId 3 is not closed properly. This is resulting in the order with recordId 4 being a child of record 3's items. Additionally there is no closure to the order record itself (missing curly braces).
To fix this, place a square brace, then a curly brace, before the comma, at the end of the item properties.
Resulting in:
Now that we have the orders cleaned up, there are just a couple braces at the end of the file that need to be closed.
The order collection is missing its closing square brace, and the main json object is missing its closing curly brace:
Resulting in:
So, this fixes the structural issues. As #Gixabel mentioned, you also need to enclose all the instances of shipDate as stings, since they are representations of dates.

Related

How to generate the Json format request using c# in VS?

Here is my method to generate the JSON formatter I'm using the SerializeObject json converter in code... But i'm stuck in adding the header value like shipper, destination & other headers here...
string json = #"{
'Shipper': {
}
}";
JObject rss = JObject.Parse(json);
JObject Shipper = (JObject)rss["Shipper"];
Shipper.Add("AddressId", ShipperAddressId);
Shipper.Add("ShipperReference", ShipperReference);
Shipper.Add("ShipperDepartment", ShipperDepartment);
Shipper.Add("CompanyName", ShipperCompanyName);
Shipper.Add("ContactName", ShipperContactName);
Shipper.Add("AddressLine1", ShipperAddressLine1);
Shipper.Add("AddressLine2", ShipperAddressLine2);
Shipper.Add("AddressLine3", ShipperAddressLine3);
Shipper.Add("Town", ShipperTown);
Shipper.Add("County", ShipperCounty);
Shipper.Add("CountryCode", ShipperCountryCode);
Shipper.Add("Postcode", ShipperPostcode);
Shipper.Add("PhoneNumber", ShipperPhoneNumber);
Shipper.Add("EmailAddress", ShipperEmailAddress);
Shipper.Add("VatNumber", ShipperVatNumber);
json = rss.ToString();
JObject jsonTxt = JObject.Parse(json);
string jsonreq = JsonConvert.SerializeObject(jsonTxt, Newtonsoft.Json.Formatting.Indented);
output I'm getting as :
{
"Shipper": {
"AddressId": "",
"ShipperReference": "Ref14",
"ShipperDepartment": "",
"CompanyName": "Intersoft Test Company",
"ContactName": "Intersoft ",
"AddressLine1": "Blays House",
"AddressLine2": "Englefield Green",
"AddressLine3": "Wick Road",
"Town": "Egham",
"County": "Surrey",
"CountryCode": "GB",
"Postcode": "TW20 0HJ",
"PhoneNumber": "7894561252",
"EmailAddress": "",
"VatNumber": ""
}
}
But my actual output should be like below format:
{
"Shipper":
{
"AddressId": "",
"ShipperReference": "",
"ShipperDepartment": "",
"CompanyName": "",
"ContactName": "Jane Smith",
"AddressLine1": "Level 5",
"AddressLine2": "Hashmoore House",
"AddressLine3": "10 Sky Lane",
"Town": "Leatherhead",
"County": "Surrey",
"CountryCode": "",
"Postcode": "",
"PhoneNumber": "07723456789",
"EmailAddress": "email#server.com",
"VatNumber": ""
},
"Destination":
{
"AddressId": "",
"CompanyName": "",
"ContactName": "",
"AddressLine1": "",
"AddressLine2": "10 Round Road",
"AddressLine3": "Mitre Peak",
"Town": "Leatherhead",
"County": "Surrey",
"CountryCode": "",
"Postcode": "",
"PhoneNumber": "",
"EmailAddress": "email#example.com",
"VatNumber": ""
},
"ShipmentInformation":
{
"ShipmentDate": "2020-03-04",
"ServiceCode": "",
"ServiceOptions": {
"PostingLocation": "",
"ServiceLevel": "01",
"ServiceFormat": "",
"Safeplace": "",
"SaturdayGuaranteed": false,
"ConsequentialLoss": "",
"LocalCollect": false,
"TrackingNotifications": "",
"RecordedSignedFor": ""
},
"TotalPackages": 1,
"TotalWeight": 0.75,
"WeightUnitOfMeasure": "KG",
"Product": "NDX",
"DescriptionOfGoods": "Clothing",
"ReasonForExport": "",
"Value": 100,
"Currency": "GBP",
"LabelFormat": "ZPL300DPI",
"SilentPrintProfile": "",
"ShipmentAction": "process",
"Packages":
[
{
"PackageOccurrence": 1,
"PackagingId": "",
"Weight": 0.75,
"Length": 15,
"Width": 15,
"Height": 15
}
],
"Items":
[
{
"ItemId": "",
"Quantity": 1,
"Description": "White Tee-shirt",
"Value": 100,
"Weight": 0.75,
"PackageOccurrence": 1,
"HsCode": "",
"SkuCode": "",
"CountryOfOrigin": "",
"ImageUrl": ""
}
]
}
}
But my issue is have to add the Destination , ShipmentInformation headers too....
I'm new to this json converter.... I hope you will be able to help me,
Thank you very much in Advance!
Copy your Expected Json into something like json2csharp as suggested. It will automatically generate the classes you need for serialization. That site is very helpful but you wanna make sure your Expected Json is in the finalized format.
Once it generates those classes, add those classes to your project.
Then you would need to populate your classes with data for instance base on your json and what i pasted into the site it created a RootObject with subclasses:
RootObject myJsonRoot = new RootObject();
myJsonRoot.Shipper = new Shipper(); //Or if you have a populated shipper class you can set it equal to that without having to fill the properties out one by one.
myJsonRoot.Shipper.AddressId = ShipperAddressId;
//Fill out Remaining Shipper Properties
myJsonRoot.Destination = new Destination();
myJsonRoot.Destination.AddressLine2 = ShipperAddressLine2;
//Fill out Remaining Destination and other classes Properties
//From here once your RootObject is fully populated you can call JsonConvert.Serialize
string output = JsonConvert.SerializeObject(myJsonRoot);
Now you have your expected Json in the output variable and do with it what you will.

Retrieve specific value from JSON in C#

I need to get values from the JSON below, for example how to index Id in Info?
The whole JSON consists of many matches, this just one with Id 5aa891cd1e1422452e8b4567, and this is a structure of one match.
I try with:
var jsonDATA = JObject.Parse(data);
foreach (var e in jsonDATA["events"]) {
//in this step, the result is JSON below
var id = e["info"]["id"];` // error: cannot access child value on newtonsoft json linq jproperty
}
Any ideas?
{"5aa891cd1e1422452e8b4567": {
"info": {
"id": "5aa891cd1e1422452e8b4567",
"event_id": "58911142245284567",
"name": "Santos Laguna vs Queretaro",
"sport": "Soccer",
"league": "Mexico Cup",
"period": "Finished",
"score": "1:0",
"status": "Live",
"start_time": "2018.03.14 03:06:53",
"state": 1017,
"state_name": "Fulltime",
"minute": 90,
"safe": false,
"safe2": false,
"blocked": false,
"stop": false
},
"stats": {
"home": {
"name": "Santos Laguna",
"color": "",
"position": "",
"on_target": "",
"off_target": "",
"attacks": "",
"dangerous_attacks": "",
"possession": "",
"goals": 1,
"corners": 5,
"yellowcards": 1,
"redcards": 0,
"throwins": 0,
"freekicks": 0,
"goalkicks": 0,
"penalties": 0,
"substitutions": 3,
"ht_result": 1
},
"away": {
"name": "Queretaro",
"color": "",
"position": "",
"on_target": "",
"off_target": "",
"attacks": "",
"dangerous_attacks": "",
"possession": "",
"goals": 0,
"corners": 8,
"yellowcards": 3,
"redcards": 1,
"throwins": 0,
"freekicks": 0,
"goalkicks": 0,
"penalties": 0,
"substitutions": 3,
"ht_result": 0
}
},
"odds": []
}}
You can use anonymous type deserialization for your data like this. Hope it works.
//using Newtonsoft.Json;
var jsonData = JsonConvert.DeserializeAnonymousType(
data,
new
{
events = new[]
{
new
{
Id = new { info = "", stats = "", away = "", odds = "" }
}
}
);
foreach(var item in jsonData.events)
{
var id=item.info.id; // getting id present in info
}

Issue With Reading Json Value

I have an application using the web api in c sharp. I have the following json, and i need to parse the
mobile_synch_tax_r
value to test for a condition. The issue is that while this method worked using a windows service, it is not working in the controller of the web api.
The relevant json is:
{"SYNC_DATA": {
"mobile_synch_tax_r": [
{
"idtax_registration":66,
"gender": "",
"title": "",
"name": "AK",
"home_address": "",
"state_of_origin": "A",
"home_town": "",
"local_government": "",
"occupation": "",
"company_name": "",
"office_address": "No",
"ministry": "",
"market": "",
"park": "",
"phone_number": "",
"email_address": "",
"photo_url": "",
"tax_id": "285",
"state": null,
"registered_by": "imported",
"biometric_status": 0,
"registration_type": 2,
"group_id": 100,
"taxpayer_password": "*6BB",
"tax_exempt": 0,
"active": 1,
"disability": "",
"rf1": 1,
"rf2": 1,
"rf3": 1,
"rf4": 1,
"rf5": 1,
"lf1": 1,
"lf2": 1,
"lf3": 1,
"lf4": 1,
"lf5": 1,
"registered_on": "2015",
"drivers_license_number": "",
"national_number": "",
"international_passport_number": "",
"company_rcc": "",
"workplace_category": "",
"office_lg": "",
"office_city": "n",
"parent_id": "",
"workplace_type": 0,
"marital_status": "",
"nationality": "u",
"vend_pin": 0,
"residential_address_status": "",
"dob": null,
"surname": "Ad",
"first_name": "",
"middle_name": "",
"utin": "",
"last_pw_reset_by": "",
"temp_reg": 0,
"company_size": "",
"business_commencement_date": null,
"proprietor_tax_id": "",
"business_ownership_type": "",
"has_subsidiary": false,
"subsidiary": false,
"subsidiary_of": "",
"n": "",
"locked": false,
"author": "",
"synch_status": false
}]}}
This is the code in the controller:
// POST api/ak
public HttpResponseMessage Post(HttpRequestMessage value)
{
var someText = value.Content.ReadAsStringAsync().Result;
Library.WriteErrorLog("Data Received" + someText);
var objects = JObject.Parse(someText);
Library.WriteErrorLog("Objects are" + objects);
if (objects != null)
{
foreach (KeyValuePair<String, JToken> app in objects)
{
var rootName = app.Key;
if (rootName == "mobile_synch_tax_r")
{"Have your way with me"}}
The code is not able to check if the
rootName=="mobile_synch_tax_r"
How am i missing it?
If you're just looking for value of the "mobile_synch_tax_r" property, you can use SelectToken to get it:
var mobile_synch_tax_r = objects.SelectToken("..mobile_synch_tax_r");
.. is the recursive descent operator, so this query searches the JSON object hierarchy for the first property named "mobile_synch_tax_r", and returns its value.

LINQ JSON add JProperty

I have the following code:
public class Post
{
public int countSubject;
public string dayName;
public string[] subjectName;
public string[] auditory;
public string[] subjectType;
public string[] TimeStart;
public string[] TimeEnd;
public string[] Teacher;
public Post(int countSubject, string dayName, string[] subjectName, string[] auditory, string[] subjectType, string[] TimeStart,
string[] TimeEnd, string[] Teacher)
{
this.dayName = dayName;
this.countSubject = countSubject;
this.subjectName = subjectName;
this.auditory = auditory;
this.subjectType = subjectType;
this.TimeStart = TimeStart;
this.TimeEnd = TimeEnd;
this.Teacher = Teacher;
}
}
List<Post> posts = new List<Post>();
posts.Add(new Post(5, "Monday", new string[] { "Свободная", "Физика", "ИНТЕХ", "ИНФОРМАТИКА" },
new string[] { "", "320", "3201", "108" }, new string[] { "", "Лекция", "Практика", "Лабораторная" },
new string[] { "08:05", "09:50", "11:35", "13:35" }, new string[] { "9:35", "11:20", "13:05", "15:05" },
new string[] { "", "Повх Л.А", "Ямполь Е.С", "Лихозвон" }));
posts.Add(new Post(5, "Tuesday", new string[] { "УПИФ", "ИНФОРМАТИКА", "МАТАН", "МАТАН" },
new string[] { "", "320", "3201", "108" }, new string[] { "Лекция", "Практика", "Лекция", "Практика" },
new string[] { "08:05", "09:50", "11:35", "13:35" }, new string[] { "9:35", "11:20", "13:05", "15:05" },
new string[] { "Лолка А.А", "Повх Л.А", "Ямполь Е.С", "Лихозвон" }));
JObject rss = new JObject(
new JProperty("Timetable",
new JArray(
new JObject(
new JProperty("CountSubject", "5"),
from q in posts
select
new JProperty(q.dayName,
from d in q.subjectType
select
new JObject(
new JProperty("SubjectName", ""),
new JProperty("Auditory", ""),
new JProperty("SubjectType", d),
new JProperty("TimeStart", ""),
new JProperty("TimeEnd", ""),
new JProperty("Teacher", "")))))));
Get this output in the console:
{
"Timetable": [
{
"CountSubject": "5",
"Monday": [
{
"SubjectName": "",
"Auditory": "",
"SubjectType": "",
"TimeStart": "",
"TimeEnd": "",
"Teacher": ""
},
{
"SubjectName": "",
"Auditory": "",
"SubjectType": "Лекция",
"TimeStart": "",
"TimeEnd": "",
"Teacher": ""
},
{
"SubjectName": "",
"Auditory": "",
"SubjectType": "Практика",
"TimeStart": "",
"TimeEnd": "",
"Teacher": ""
},
{
"SubjectName": "",
"Auditory": "",
"SubjectType": "Лабораторная",
"TimeStart": "",
"TimeEnd": "",
"Teacher": ""
}
],
"Tuesday": [
{
"SubjectName": "",
"Auditory": "",
"SubjectType": "Лекция",
"TimeStart": "",
"TimeEnd": "",
"Teacher": ""
},
{
"SubjectName": "",
"Auditory": "",
"SubjectType": "Практика",
"TimeStart": "",
"TimeEnd": "",
"Teacher": ""
},
{
"SubjectName": "",
"Auditory": "",
"SubjectType": "Лекция",
"TimeStart": "",
"TimeEnd": "",
"Teacher": ""
},
{
"SubjectName": "",
"Auditory": "",
"SubjectType": "Практика",
"TimeStart": "",
"TimeEnd": "",
"Teacher": ""
}
]
}
]
}
The question is, the type of subject is filled correctly, but the rest of the field can not fill because when adding a second "from" with q.subjectName etc after "from d in q.subjectType" makes one more iteration cycle and to obtain duplicates JSON objects.
As has to be:
{
"Timetable": [
{
"CountSubject": "5",
"Monday": [
{
"SubjectName": "Свободная",
"Auditory": "",
"SubjectType": "",
"TimeStart": "08:05",
"TimeEnd": "09:35",
"Teacher": ""
},
{
"SubjectName": "Физика",
"Auditory": "320",
"SubjectType": "Лекция",
"TimeStart": "09:50",
"TimeEnd": "11:20",
"Teacher": "Повх Л.А"
},
{
"SubjectName": "ИНТЕХ",
"Auditory": "3201",
"SubjectType": "Практика",
"TimeStart": "11:35",
"TimeEnd": "13:05",
"Teacher": "Ямполь Е.С"
},
{
"SubjectName": "ИНФОРМАТИКА",
"Auditory": "108",
"SubjectType": "Лабораторная",
"TimeStart": "13:35",
"TimeEnd": "15:05",
"Teacher": "Лихозвон"
}
],
"Tuesday": [
{
"SubjectName": "УПИФ",
"Auditory": "320",
"SubjectType": "Лекция",
"TimeStart": "08:05",
"TimeEnd": "09:35",
"Teacher": "Лолка А.А"
},
{
"SubjectName": "ИНФОРМАТИКА",
"Auditory": "",
"SubjectType": "Практика",
"TimeStart": "09:50",
"TimeEnd": "11:20",
"Teacher": "Повх Л.А"
},
{
"SubjectName": "МАТАН",
"Auditory": "",
"SubjectType": "Лекция",
"TimeStart": "11:35",
"TimeEnd": "13:05",
"Teacher": "Ямполь Е.С"
},
{
"SubjectName": "МАТАН",
"Auditory": "",
"SubjectType": "Практика",
"TimeStart": "13:35",
"TimeEnd": "15:05",
"Teacher": "Лихозвон"
}
]
}
]
}
Sorry my bad English, google translate
When you are using two sections "from" you'll receive cartesian multiplication instead of joining two collections.
To get what you want try to rewrite it like this:
from index in Enumerable.Range(0, q.subjectType.Length)
select
new JObject(
new JProperty("SubjectName", q.subjectName[index]),
new JProperty("Auditory", q.auditory[index]),
new JProperty("SubjectType", q.subjectType[index]),
new JProperty("TimeStart", q.TimeStart[index]),
new JProperty("TimeEnd", q.TimeEnd[index]),
new JProperty("Teacher", q.Teacher[index])))))));

Rest request method PUT JSON array (string) C#

My problem is:
I have a JSON format string array:
[
{
"Calle": "San pedro te asalto",
"CodigoPostal": "",
"Colonia": "",
"CorreoElectronicoReceptor": "luis.garcia#ixpan.com.mx",
"DelegacionMunicipio": "",
"Estado": "Distrito Federal",
"FechaRegistro": "/Date(-62135596800000+0000)/",
"FechaUltimaModificacion": "/Date(-62135596800000+0000)/",
"IdCliente": 44170,
"IdClienteEmpresa": null,
"IdEmpresa": 0,
"IdEstadoCliente": 1,
"IdMetodoPago": 0,
"IdUsuario": 0,
"Localidad": null,
"NombreContacto": "",
"NombreRazonSocial": "",
"NumCuenta": null,
"NumExterior": null,
"NumInterior": null,
"Pais": "México",
"RFCReceptor": "XAXA010101XA0",
"Referencia": null,
"TelFijoClaveInternacional": "",
"TelFijoExt": "",
"TelFijoReceptor": "",
"TelMoviReceptor": "",
"TelMovilClaveInternacional": ""
},
{
"Calle": "Terricola oriental",
"CodigoPostal": "",
"Colonia": "",
"CorreoElectronicoReceptor": "gabo.luna#ixpan.com.mx",
"DelegacionMunicipio": "",
"Estado": "Distrito Federal",
"FechaRegistro": "/Date(-62135596800000+0000)/",
"FechaUltimaModificacion": "/Date(-62135596800000+0000)/",
"IdCliente": 44171,
"IdClienteEmpresa": null,
"IdEmpresa": 0,
"IdEstadoCliente": 1,
"IdMetodoPago": 0,
"IdUsuario": 0,
"Localidad": null,
"NombreContacto": "",
"NombreRazonSocial": "",
"NumCuenta": null,
"NumExterior": null,
"NumInterior": null,
"Pais": "México",
"RFCReceptor": "LUPC910202HDF",
"Referencia": null,
"TelFijoClaveInternacional": "",
"TelFijoExt": "",
"TelFijoReceptor": "",
"TelMoviReceptor": "",
"TelMovilClaveInternacional": ""
},
{
"Calle": "Via lactea rectal",
"CodigoPostal": "",
"Colonia": "",
"CorreoElectronicoReceptor": "arturo.madrid#iofacturo.mx",
"DelegacionMunicipio": "",
"Estado": "Distrito Federal",
"FechaRegistro": "/Date(-62135596800000+0000)/",
"FechaUltimaModificacion": "/Date(-62135596800000+0000)/",
"IdCliente": 44172,
"IdClienteEmpresa": null,
"IdEmpresa": 0,
"IdEstadoCliente": 1,
"IdMetodoPago": 0,
"IdUsuario": 0,
"Localidad": null,
"NombreContacto": "",
"NombreRazonSocial": "",
"NumCuenta": null,
"NumExterior": null,
"NumInterior": null,
"Pais": "México",
"RFCReceptor": "CMS941215JF7",
"Referencia": null,
"TelFijoClaveInternacional": "",
"TelFijoExt": "",
"TelFijoReceptor": "",
"TelMoviReceptor": "",
"TelMovilClaveInternacional": ""
}
]
My contract is:
[WebInvoke(Method = "PUT",
UriTemplate = "/updatedProduct?Token={Token}&Entity={Entity}",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped
)]
ResPostList updatedProduct(String Token, String Entidad);
...localhost/myService/updatedProduct?Token=MyToken&Entity=MyJSONArrayInString
My problem is when I send a JSON array, if sending JSON plane, my method works well, that's what I need to add?

Categories

Resources