-
Sep 25th, 2018, 10:09 AM
#1
Thread Starter
Addicted Member
Still working on this project (new to c#) Streamreader to datatable
I finally have data from an HttpWebResponse into a streamreader. I can write it to the console and it shows data so I know I have data. I have been searching on how to get that data into a datatable or even to a file which then I can load it into a datatable but can't find anything in google. Any help would be much appreciated.
Thanks
-
Sep 25th, 2018, 05:27 PM
#2
Re: Still working on this project (new to c#) Streamreader to datatable
You have posted in the CodeBank forum, which is for sharing working code snippets, not for asking questions. I have asked the mods to move this thread to the C# forum. Please don't post a duplicate thread before they do that.
In the meantime, perhaps you could post the relevant code that you already have and point out where in the process you are stuck. If you have a StreamReader then you can call ReadLine to get a String for each line. That is just like any other String, so breaking it up into parts will, in general, be like for any other String. If you're having specific issues doing that then we need specific details of that. Adding multiple substrings to a DataRow and that to a DataTable is undoubtedly something you could find information for on the web. Most likely you are searching for too broad a subject that is actually a combination of subjects that is specific too you rather than each individual subject that is probably well-covered.
-
Sep 25th, 2018, 05:45 PM
#3
Re: Still working on this project (new to c#) Streamreader to datatable
Thread moved from the 'CodeBank C#' forum (which is for you to post working code examples, not questions) to the 'C#' forum
-
Sep 26th, 2018, 06:45 AM
#4
Thread Starter
Addicted Member
Re: Still working on this project (new to c#) Streamreader to datatable
I think you are correct. Here is the part of the code I am having a problem with
using (var requestStream = selectRequest.GetRequestStream())
{
requestStream.Write(jsonArray, 0, jsonArray.Length);
}
// Executing HTTP request and getting reply from server.
using (var response = (HttpWebResponse)selectRequest.GetResponse())
{
// Displaying reply in console.
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
Console.WriteLine(reader.ReadToEnd());
//write the file to disk
string path = "C:\\Temp\\bpm.txt";
using (StreamWriter outputfile = new StreamWriter(path))
{
outputfile.Write(reader.ReadToEnd());
//outputfile.Write(content);
}
//get the data into a datatable
var dt = new DataTable();
}
}
The console.writeline(reader.ReadToEnd()) works fine. Infact the if I change it to Console.write(reader.readline()), it does the same thing. Hundreds of line in the console.
When I issue the StremWriter, it comes out blank so therefor the datatable would be blank also. I have tries several other combinations to no avail. An excerpt of what the console looks like is this:
{"rowConfig":{"Id":{"dataValueType":0},"Amount":{"dataValueType":5,"precision":2},"Probability":{"da taValueType":4},"Stage":{"dataValueType":10,"isLookup":true,"referenceSchemaName":"OpportunityStage" },"Account":{"dataValueType":10,"isLookup":true,"referenceSchemaName":"Account","primaryImageColumnN ame":"AccountLogo"},"Contact":{"dataValueType":10,"isLookup":true,"referenceSchemaName":"Contact","p rimaryImageColumnName":"Photo"}},"rows":[{"Amount":0.00,"Probability":0,"Stage":{"value":"a9aafdfe-2242-4f42-8cd5-2ae3b9556d79","displayValue":"Closed lost","primaryImageValue":""},"Account":{"value":"c5e852b1-7902-4a59-9bd2-4d7753644080","displayValue":"Dematic","primaryImageValue":""},"Contact":"","Id":"d4c3b8c3-75e7-493d-abda-61f35a75c3a5"},{"Amount":0.00,"Probability":0,"Stage":{"value":"a9aafdfe-2242-4f42-8cd5-2ae3b9556d79","display
-
Sep 26th, 2018, 07:07 AM
#5
Re: Still working on this project (new to c#) Streamreader to datatable
Originally Posted by BSWhipp
When I issue the StremWriter, it comes out blank so therefor the datatable would be blank also. I have tries several other combinations to no avail.
Try removing (or commenting out) the line: Console.WriteLine(reader.ReadToEnd());
If you do need to both display it and write it to the file, store the result in a variable and then display+write the contents from the variable.
-
Sep 26th, 2018, 07:16 AM
#6
Thread Starter
Addicted Member
Re: Still working on this project (new to c#) Streamreader to datatable
Like this?
string results = reader.ReadLine();
using (StreamWriter outputfile = new StreamWriter(path))
{
outputfile.Write(results);
Ultimately I want to get it into a datatable for each field. Then I can import it into a SQL table.
-
Sep 26th, 2018, 07:28 AM
#7
Re: Still working on this project (new to c#) Streamreader to datatable
Originally Posted by BSWhipp
Like this?
Yes.
Ultimately I want to get it into a datatable for each field. Then I can import it into a SQL table.
As the data appears to be JSON, use a JSON parser... the one from Newtonsoft is often recommended, and can apparently be added to your project via NuGet.
I don't have any examples handy, but you should be able to pass the contents of the result variable into the parser to have it parse it all.
-
Sep 26th, 2018, 07:33 AM
#8
Thread Starter
Addicted Member
Re: Still working on this project (new to c#) Streamreader to datatable
OK, I have newtonsoft already referenced but don't know how to use it. I will try to google it. But as I am know to this, the result are in JSON? I will google JSON parser to datatable?
I really thank you for this input. The company I am working with to get this data is not quite forthcoming.
-
Sep 26th, 2018, 08:38 AM
#9
Thread Starter
Addicted Member
Re: Still working on this project (new to c#) Streamreader to datatable
Having an issue converting to the datatable.
This is the code:
var json = new JavaScriptSerializer().Serialize(selectQuery);
// Converting a JSON object string to a byte array.
byte[] jsonArray = Encoding.UTF8.GetBytes(json);
// Creating an instance of HTTP request.
var selectRequest = HttpWebRequest.Create(selectQueryUri) as HttpWebRequest;
// Defining request method.
selectRequest.Method = "POST";
// Defining request content type.
selectRequest.ContentType = "application/json";
// Adding earlier received authentication cookies to a data fetch query.
selectRequest.CookieContainer = AuthCookie;
// Set length for request content.
selectRequest.ContentLength = jsonArray.Length;
// Putting BPMCSRF token to the request header.
CookieCollection cookieCollection = AuthCookie.GetCookies(new Uri(authServiceUri));
string csrfToken = cookieCollection["BPMCSRF"].Value;
selectRequest.Headers.Add("BPMCSRF", csrfToken);
// Placing JSON object to request content.
using (var requestStream = selectRequest.GetRequestStream())
{
requestStream.Write(jsonArray, 0, jsonArray.Length);
}
// Executing HTTP request and getting reply from server.
using (var response = (HttpWebResponse)selectRequest.GetResponse())
{
//get the data into a datatable
var dt = new DataTable();
dt = (DataTable)JsonConvert.DeserializeObject(json, (typeof(DataTable)));
}
Getting error
An unhandled exception of type 'Newtonsoft.Json.JsonSerializationException' occurred in Newtonsoft.Json.dll
Additional information: Unexpected JSON token when reading DataTable. Expected StartArray, got StartObject. Path '', line 1, position 1.
When running rthe JSonConvert line.
-
Sep 26th, 2018, 05:20 PM
#10
Re: Still working on this project (new to c#) Streamreader to datatable
The lack of Code tags around your code makes it extremely hard to read, but from the few lines before the end it seems that you aren't using the results variable (or an equivalent), so presumably what are you passing to DeserializeObject isn't the right thing.
-
Sep 27th, 2018, 09:36 AM
#11
Thread Starter
Addicted Member
Re: Still working on this project (new to c#) Streamreader to datatable
I can believe I can't find anything on the internet that can help me. It looks like I will have to parse this out manually which I can do but JSon should (and probably does) do it or at least there should be more documentation on it so I can learn.
-
Sep 28th, 2018, 03:50 AM
#12
Re: Still working on this project (new to c#) Streamreader to datatable
Well you seemed to have the right thing for the first part of the process (getting the json text) back in post #6, and you seemed to take a step backwards in post #9.
Once you have the json text (which will be in the variable results if you go back to what you had in post #6), you can then feed that into the parser.
A simple search of this site (using the keywords: Newtonsoft datatable) gave several threads, the first of which looks to be useful to you:
http://www.vbforums.com/showthread.p...o-DataGridView
While it is VB code, the equivalent C# code will be virtually identical.
If that also doesn't work for you, try not going directly to a datatable (as that may be what is causing the problem), and instead just try using a simpler parsing option (if you don't know how, search for examples - with a popular library like that, there will be many).
-
Sep 28th, 2018, 07:08 AM
#13
Thread Starter
Addicted Member
Re: Still working on this project (new to c#) Streamreader to datatable
What I ended up doing is manually creating a parser. It took about 20 lines of code but it works great.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|