C# tekst van een website krijgen

Status
Niet open voor verdere reacties.
Ik heb zowel xml and json gebruikt maar als ik nu iets wil versturen/opslaan grijp is eigenlijk meteen naar json. Maar bij XML vind ik het gebruik van attributes wel weer zeer fijn en leesbaar (vooral met kleurcode).
Ik gebruikte in WP8 bijvoorbeeld een korte json string als navigation parameter om toch een kleine object door te sturen naar een pagina.

Dan had je bijvoorbeeld een person:
Code:
{"firstname":"Jan","lastname":"Janssen","age":50}
en dat is eenvoudig als string door te geven en weer naar een person om te zetten in de andere pagina. (Kan ook met xml :P en nu kun je ook in WP gewoon een 'person' doorgeven)


------


Wat is de error die je krijgt?
Krijg je hem op de OpenStreamForWriteAsync regel?
Maakt deze method een bestand aan als deze niet aanwezig is? (anders heb je een exception dat hij het bestand niet kan vinden misschien)
Is het bestand in gebruikt? (unathorized?)

Heb is altijd handig om file access in een try/catch te zetten voor het geval er een exception om wat voor reden dan ook komt. Eventueel een messagebox met de foutmelding laten zien.
 
Ik weet alleen niet hoe ik die lijst weer kan lezen op een andere pagina, nu heb ik dit op de mainpage:

[CPP]

private async Task readXMLAsync()
{
var content = string.Empty;

var myStream = await ApplicationData.Current.LocalFolder.OpenStreamForReadAsync("favorieten.xml");


using (StreamReader reader = new StreamReader(myStream))
{
content = await reader.ReadToEndAsync();
}

favoriet.ItemsSource = content;
}[/CPP]

Maar dan krijg ik geen lijst terug
 
Laatst bewerkt:
Je moet weer op dezelfde manier de data terughalen:

Code:
var serializer = new DataContractSerializer(typeof(List<Favorieten>));

en dan de 'deserialize' method of hoe hij dan ook heet gebruiken misschien readobject omdat de andere writeobject heet. Daar zul je wel de content string in mee moeten geven en dan krijg je een lijst terug.
 
Deze errors krijg ik ook kwam ik net achter

Bekijk bijlage 212373

Hier crashed je app toch nergens of wel?

Ook zou ik je debug writelines eens opschonen zodat ze waardevolle info geven.
De hele uitleg van het spel zal wel overbodig zijn en als je een list wilt weergeven heb je niets aan om deze list variable uit te schrijven naar het debug window. Misschien beter om de list.Count weer te geven als je wilt weten hoeveel er in zitten? (Dan wel even ook erbij zetten om welke list het gaat.
 
Nee daar crasht ie niet, maar ik dacht misschien werkt daarom het readen niet.

Die found spellen is van een andere list, dus die heeft er verder niks mee te maken
 
Dit werkt niet

[CPP] var serializer = new DataContractResolver(typeof(List<Favorieten>));
using (var stream = await ApplicationData.Current.LocalFolder.OpenStreamForReadAsync(XMLFILENAME))
{
serializer.ReadObject(stream);
}

favoriet.ItemsSource = serializer;[/CPP]

favorieten is een abstracte class geeft ie als error
 
Laatst bewerkt:
favoriet.ItemsSource = serializer;

deze regel zal niet kloppen denk ik, krijg je geen List<Favorieten> terug van de ReadObject method?

(heb deze DataContractResolver nog nooit gebruikt)
 
kun je eens screenshot van error maken want je kunt best een List<AbstractClass> maken. En is favorieten een abstracte class?

Of is DataContractResolver een abstracte class? Dan kun je geen 'new' gebruiken.
 
De favorieten ziet er uit als andere classes die ik gebruik ( mapje models). Ik zal morgen wel een screen shot maken
 
Er staat nergens dat favorieten abstract is, de datacontractresolver is abstract. (abstract will zeggen dat het een base class is van bepaalde classes en er kan geen variable van aangemaakt worden (new keyword kan niet worden gebruikt))

Je kunt vast gewoon de DataContractSerializer gebruiken die je gebruikt om writeobject te gebruiken. Deze heeft ook wel readobject.
De tweede error zal dan ook verdwijnen.
 
Ja maar dan krijg ik niks terug

[CPP]

var serializer = new DataContractSerializer(typeof(List<Favorieten>));
using (var stream = await ApplicationData.Current.LocalFolder.OpenStreamForReadAsync(XMLFILENAME))
{
serializer.ReadObject(stream);

}

Debug.WriteLine("{0}", serializer);
favoriet.ItemsSource = serializer;

[/CPP]

serializer is dan geen lijst
 
Code:
var result = serializer.ReadObject(stream);

of

Code:
favoriet.ItemsSource = serializer.ReadObject(stream);

?
 
Dat werkt alleen de grid in de listview wordt zichtbaar alleen text ontbreekt nog

Dit komt in de debugger te staan:

A first chance exception of type 'System.Xml.XmlException' occurred in SYSTEM.XML.NI.DLL
A first chance exception of type 'System.Runtime.Serialization.SerializationException' occurred in SYSTEM.RUNTIME.SERIALIZATION.NI.DLL
 
Laatst bewerkt:
Even debuggen wat voor object je terug krijgt, moet een List<Favorieten> zijn en dan kun je zien wat erin staat.
Als je een exception krijgt krijg je misschien 'null' terug en dan is er geen lijst om weer te geven.

Je kunt zoveel als je wilt opslaan in de list, als je ook zorgt dat je ze allemaal toevoegt bij het opslaan. Een voor een werkt niet.
 
Laatst bewerkt:
[CPP]
Debug.WriteLine(" Favorieten gevonden {0}", typeof(List<Favorieten>));

var serializer = new DataContractSerializer(typeof(List<Favorieten>));
using (var stream = await ApplicationData.Current.LocalFolder.OpenStreamForReadAsync(XMLFILENAME))
{
favoriet.ItemsSource = serializer.ReadObject(stream);
}
[/CPP]

hij crasht nu bij het toevoegen aan de favoriet ListView

Net weet ik niet hoe de grid in de listview wel zichtbaar werd

En ik weet niet hoe je meerdere favorieten kan toevoegen want nu blijft het er maar maximaal 1
 
Laatst bewerkt:
Code:
favoriet.ItemsSource = serializer.ReadObject(stream);

Split deze dingen eens zodat je kunt debuggen wat je terug krijgt.

Code:
var result = serializer.ReadObject(stream);
favoriet.ItemsSource = result;

Ik zie alleen maar stukjes dus weet niet hoe je het wilt maken. Als je favorieten wilt opslaan heb je ergens een list staan met deze favorieten (private field in de page of class die je gebruikt).
Als je een favoriet wilt toevoegen voeg je het aan deze list toe. Als je het wilt opslaan sla je deze list op. Je kunt zoveel als je wilt aan de list toevoegen en eventueel meteen opslaan na het toevoegen.
Als je je favorieten wilt laden, laad je deze in deze zelfde list zodat je nieuwe daar op dezelfde plaats kunt toevoegen en weer opslaan met de nieuwe favorieten.


zoiets als dit (notepad code, zelf code schrijven :P):
Code:
Page
{
	private List<Favorieten> _fav;

	private void OnNavigatedTo()
	{
		//navigate to from the page
		_fav = new List<Favorieten>();
		
		//load data methods... put result from read into _fav unless it's null
		
	}

	private void OnNavigatedFrom()
	{
		//navigate away from the page
		
		//save _fav
	}

	private void AddToFavorites()
	{
		_fav.Add(<new favorite class>);
		//optional: save right away
	}
}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan