Deserialize hexadecimal values with Newtonsoft JSON - c#

I'm trying to deserialize json into a C# object. The json basically looks like this:
{ "hexValue": "0x9a7f" }
My POCO looks like this:
public class HexTest
{
public int hexValue;
}
I've read in a link from this question that Newtonsoft supports deserializing hex values. But in all fairness, those release notes were published a decade ago. I've even read in some source code on github
published here what appears to be code to deserialize a hex formatted string that starts with "0x". Yet, when I try to deserialize a hex value, I always get the following exception:
Could not convert string to int: 0x9a7f.
It doesn't matter what type I try. I've tried using int long decimal Decimal, etc... From reading the source it looked like the Decimal type should have worked but nothing works. Does Newtonsoft really have support for converting hex values defined as strings into a numeric data type of some kind?
Sure, I know I can use the information in the question I linked to above to implement custom support for it but I'd really rather use the built-in support if it's there.

Thanks to the comments to my original question above by Fildor, I was able to resolve the problem by removing quotes around the value in the JSON so it now read like this:
{ "hexValue": 0x9a7f }
Also, further testing reveals that any of the numeric data types work for this in the POCO including int, long, and decimal. It is probably worth noting that (not sure about the latest standard) most if not all JSON validators will consider this invalid JSON because hexadecimal is not a valid JSON numeric data type.
Taking another look at the source, it's clear why this works and not the string. The parser will only call the method that detects the 0x prefix if it recognizes the json value token as a numeric type which, if quoted, it cannot do because by definition, that is a string.

Related

Maintaining source string format when reading a date-time from a JSON path and writing it to another file

How can I have Newtonsoft.Json read the value of a path without converting or otherwise meddling with values?
This code
jsonObject.SelectToken("path.to.nested.value").ToString()
Returns this string
03/07/2019 00:02:12
From this string in the JSON document
2019-07-03T00:02:12.1542739Z
It's lost its original formatting, ISO 8601 in this case.
I would like all values to come through as strings, verbatim. I'm writing code to reshape JSON into other formats and I don't want to effect the values as they pass through my .NET code.
What do I need to change? I am not wedded to Newtonsoft.Json btw.
I got it, I think.
jsonObject.SelectToken(path).ToString(Newtonsoft.Json.Formatting.None);
The other options were to supply nothing or this.
Newtonsoft.Json.Formatting.Indented
Which is strange logic in this API as you'd think None means not indented but it means not ... I don't know. Hang on....
Okay so None or Indented returns
"2019-07-03T00:02:12.1542739Z"
(including quotes) but using the overload taking no parameters returns
03/07/2019 00:02:12
That's an odd API design ¯\_(ツ)_/¯
Here's a screenshot which shows really simple repro code.

Corrupted JSON HTTP response

I am getting a HTTP request for a website and the content type is JSON. However, I am getting a nested JSON that is a unicode and is causing consistency problems.
Here is an example:
{"key1":"value",
"key2":"value",
"key3":{
u'key31':u'value',
u'key32':u'value'}}
This reminds me of python 2.7 troubles but I am not sure how to fix this JSON. I am using C# to parse it. Everything works correctly until I try to access key3.
The content should be a JSON object type but it is considered rather a value or a string.
Thanks for ya help. Is there a way to fix it if it is actually corrupted or am I parsing it wrongly?
You're correct that this json object is not complete / does not have the correct syntax. You're missing a closing '}' character.
How are you parsing your data? Try taking a look at this documentation.
your json object is not in valid formatted it should be like as folllows
{
"key1":"value",
"key2":"value",
"key3":{
" u'key31'":"u'value'",
"u'key32'":"u'value'"
}
}
by any chance do you get this json from python dump? coz Python's unicode literals are not valid JSON, and neither are single quotes

Can I Deserialize a JSON string that contains 0.0 in C#?

The JSON I'm getting back from a webservice has an integer incorrectly represented as 0.0. My deserialization code looks like this:
var serializer = new JsonSerializer();
var ret = serializer.Deserialize<T>(jsonTextReader);
And I get an error like this:
Input string '0.0' is not a valid integer.
My question is, is there a way to specify a less strict deserialization method so that I can parse this string?
EDIT: The web service returns no schema so I don't know why the deserializer tries to convert it to an int instead of a float or double.
I'd say that you should go ahead and creat your classes on Json -> C#
var o = (JObject)serializer.Deserialize(myjsondata);
You can use the C# dynamic type to make things easier. This technique also makes re-factoring simpler as it does not rely on magic-strings. Use JsonConvert.DeserializeObject<dynamic>()to deserialize this string into a dynamic type then simply access its properties in the usual way in C#.
Im not sure why youre getting
Input string '0.0' is not a valid integer.
since if you dont have any Json data it should just be left at null and you shouldnt have this problem

C# force integer when converting XML to JSON

I am attempting to convert XML into JSON in order to generate a HTTP POST request to an API. I am getting an error because one of the fields is meant to be an integer instead of a string. From what i have read adding "json:Integer="true"" to the node will cause it to become an int, but this doesnt seem to be working for me. Here is the xml and the resulting json. The arrays are working, but the integer is not.
<shipments json:Array="true" xmlns:json="http://james.newtonking.com/projects/json">
<shipment_tracking_number />
<response_shipment_date>2016-10-18T01:00:00.0000000-04:00</response_shipment_date>
<response_shipment_method>UPS Ground</response_shipment_method>
<expected_delivery_date>2016-10-18T01:00:00.0000000-04:00</expected_delivery_date>
<ship_from_zip_code>12345</ship_from_zip_code>
<carrier_pick_up_date>2016-10-18T01:00:00.0000000-04:00</carrier_pick_up_date>
<carrier>UPS</carrier>
<shipment_items json:Array="true">
<shipment_item_id>FF12345K</shipment_item_id>
<alt_shipment_item_id>1234567890</alt_shipment_item_id>
<merchant_sku>B00xxxx</merchant_sku>
<response_shipment_sku_quantity json:Integer="true">1</response_shipment_sku_quantity>
</shipment_items>
</shipments>
string jsonrequest = JsonConvert.SerializeXmlNode(doc,
Newtonsoft.Json.Formatting.None, true);
{"shipments":[
{
"shipment_tracking_number":null,
"response_shipment_date":"2016-10-18T01:00:00.0000000-04:00",
"response_shipment_method":"UPS Ground",
"expected_delivery_date":"2016-10-18T01:00:00.0000000-04:00",
"ship_from_zip_code":"12345",
"carrier_pick_up_date":"2016-10-18T01:00:00.0000000-04:00",
"carrier":"UPS",
"shipment_items":[
{
"shipment_item_id":"FF12345K",
"alt_shipment_item_id":"1234567890",
"merchant_sku":"B00xxxx",
"response_shipment_sku_quantity":"1"
}]
}]
}
I need "response_shipment_sku_quantity":"1" to show up as "response_shipment_sku_quantity":1, but it doesnt seem to be working. I can modify the XML or the code that performs the conversion. I dont mind which as long as this can be done.
You define the attribute wrongly. This is how it should look like.
<response_shipment_sku_quantity json:Type='Integer'>1</response_shipment_sku_quantity>
EDIT:
Newtonsoft.Json XmlNodeConverter
Look methods private void SerializeNode and string dataType = GetDataType(node); they suggest this definition.
Another option is to Deserialize the xml to class with proper types for the properties and after that Serialize it to Json.

Distinguish byte[] and string from JSON .NET

I'm doing a class that gets a string of a JSON (that represents an object) and I'm deserializing it using JSON.NET from Newtonsoft. As I don't know exactly the object that I need to serialize what I'm doing with the JSON.NET library is to get a Dictionary.
The thing is that I'm processing each property differently depending of its type. I can recognize without problems the date or intes by comparing the parsed object JToken.Type with for instance JTokenType.Date.
However the type JTokenType.Bytes, seem to not be working. Then I have this problem, I have a string that represents a normal string an a string that represents a byte[]. How can I distinguish them? Either by using the JTokenType class or other types? Any idea?
Lot of thanks
Best regards
I attach here an example of the JSON that I'm parsing:
{"firstName":"Mario","lastName":"Bross","users":[{"name":"Tony","country":"UK","telephone":"663242342"},{"name":"Ahmed","country":"UAE","telephone":"66934534"},{"name":"Alejandro","country":"ES","telephone":"666243098"}],"firstTable":true,"secondTable":false,"greeting":false,"headerInfo":"This is a test document","footerInfo":"This page ends here","date":"2016-03-29T00:00:00+02:00","remark":"Here we have some remarks","logo":"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...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"}
The last property is a picture (byte[])
Given a string of printable characters, you want to determine whether that string has been base64 encoded or not. This is not possible. You can determine if a string may have been base64 encoded:
How to check whether the string is base64 encoded or not
But it is possible for a user to construct a string that looks as if it was base64 encoded, but in fact was not.
If you have control over the data source, you should add an extra metadata field to indicate whether a field is bas64 encoded or not.

Categories