Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von BerndFfm
Thema: Wie Json mit Double Quotes statt Single Quotes serialisieren?
Am im Forum: Grundlagen von C#

NewtonSoft.Json braucht "

Was passiert wenn Du vorher


json = json.Replace("'", "\"");

ausführst ?

Irgendwo wurde " nach ' konvertiert, da können sich Fehler einschleichen wenn ' in einem Namen vorkommt.

Grüße Bernd

Thema: VS2022 Preview .NET MAUI iOS Simulator
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)


Im VS 2019 läuft der iOS Emulator nicht wenn man einen M1 Mac hat. Es kommt nur ein schwarzes Fenster.

Ich hatte gehofft dass es im VS 2022 besser ist.

Grüße Bernd

Thema: Android Phone - Bilder kopieren
Am im Forum: Cross Platform Entwicklung - Mobile und IoT


Mit adb.exe (Android Debug Bridge) kann man auch Dateien vom Android Handy auf den PC kopieren.

Grüße Bernd

Thema: Radio Button als Gruppe abfragen
Am im Forum: Grundlagen von C#

Zitat von BerndFfm


string mission = "";
if (radioButton1.Checked)  mission = "Einsatz";
if (radioButton2.Checked)  mission = "Pause";

Mein Beispielcode kann in einem gemeinsamen Eventhandler stehen oder in einer Routine die die Auswahl verarbeitet, z.B. eine Save-Routine.

Es ist auf jeden Fall sinnvoll den Code robust zu gestalten wie schon oben geschrieben wurde.

So wie ich bei einem alten Röhrenradio alle Tasten gleichzeitig runterdrücken kann (wer hat das als Kind nicht probiert wer in meinem Alter ist) kann man auch nicht ausschließen dass kein Radiobutton aktiv ist oder mehrere (Falsche Groupbox etc.)

Grüße Bernd

Thema: Radio Button als Gruppe abfragen
Am im Forum: Grundlagen von C#


Wenn die Radiobuttons einen Namen haben kannst Du sie direkt abfragen :


string mission = "";
if (radioButton1.Checked)  mission = "Einsatz";
if (radioButton2.Checked)  mission = "Pause";

oder


string mission = "";
if (radioButton1.IsChecked)  mission = "Einsatz";
if (radioButton2.IsChecked)  mission = "Pause";

Grüße Bernd

Thema: Eigenes Zertifikat für ASP.NET Core Anwendung
Am im Forum: Web-Technologien


Der GPS Server selber kann kein SSL, deshalb muss man einen Reverse Proxy einsetzen.

Die Anleitung für Nutzung des IIS hat leider nicht funktioniert.

Für einen Reverse Proxy mit Dot.NET Core gibt es gute Vorlagen, die liefen auch sofort, auch mit SSL. Leider haben die keine Sockets dorchgelassen.

Hab nginx installiert und SSL lief sofort.

Xamarin Forms erkennt das letsencrypt Zertifikat nicht, ein bekannter Fehler. Es gibt aber einen Workaround dazu.

Grüße Bernd

Thema: Eigenes Zertifikat für ASP.NET Core Anwendung
Am im Forum: Web-Technologien

Wen es interessiert :

Ich habe mir das Zertifikat kostenlos bei zerossl.com geholt. Die greifen auf Letsencrypt zurück. Dort kann man angeblich keinen eigenen Server anmelden, hat aber doch funktioniert.
Sogar mit DynDNS (AceDNS) Adresse, also ohne feste IP.

Das Zertifikat gilt allerdings nur 3 Monate, dann muss es erneuert werden.

Als Verifizierung habe ich das File-Verfahren ausgewählt, man muss eine Datei auf dem Server anlegen.

Meine Seite : Finderwille Einsatz Server - Einsatzkraft anlegen

Grüße Bernd

Thema: Eigenes Zertifikat für ASP.NET Core Anwendung
Am im Forum: Web-Technologien

Danke ! Klappt jetzt !

Eintrag in der appsettings.json :


{
  "Kestrel": {
    "Endpoints": {
      "Http": {
        "Url": "http://212.223.10.24:5000"
      },
      "Https": {
        "Url": "https://212.223.10.24:5001",
        "Certificate": {
          "Path": "...\\finderwille.xddns.de\\certificate.pfx",
          "Password": "rumpelstilzchen"
        }
      }
    }
  }
}

Grüße Bernd

Thema: Eigenes Zertifikat für ASP.NET Core Anwendung
Am im Forum: Web-Technologien


Hallo,

für meine ASP.NET Core Anwendung (5.0) habe ich mir ein Zertifikat erstellt.

Kann ich das in VS 2019 benutzen ? Auch für Debug ?

Ich kompiliere in eine Exe, ohne IIS.

Muss man dazu IIS verwenden ?

Grüße Bernd

Thema: Vorstellung Projekt 'Finderwille Einsatz App'
Am im Forum: Smalltalk

Es gibt weitere Fortschritte :

Viele Einsatzkräfte (Rettungshundestaffeln, Quad-Staffel, Polizei) haben die App testweise im Einsatz und nutzen sie im Training und im Einsatz.

Die Zuverlässigkeit ist sehr gut geworden. 100% für den Betrieb im Hintergrund wird es wohl nie geben. Nicht mehr bei den ganzen Energiesparoptionen.

Die App läuft auch sehr gut in Gebieten mit schlechter Mobilfunkabdeckung über 2G und wird von einigen Einsatzkräften und Helfern in Polen und in der Ukraine benutzt.

Das Deployment dauert nur noch wenige Minuten. Wenn ich die Versionsnummer nicht ändere sondern nur die Buildnummer ist die App sogar immer sofort im App Store verfügbar.

Für die Erfassung der Einsatzkräfte habe ich eine Erfassungsmaske in ASP.NET Core mit Razor erstellt.

Das gefällt mir gut : Zahlreiche Möglichkeiten der Veröffentlichung, man kann Design und Funktionen gut trennen. Ich erstelle eine Exe-Datei die als Dienst auf dem gleichen Rechner läuft wie die GPS Server Software (Windows 10 Rechner).

Hier kann man es sehen (noch ohne SSL) : http://finderwille.xddns.de:5000/

Grüße Bernd

Thema: Kontinuierliche Mysql Abfrage
Am im Forum: Datentechnologien


Mit Sockets kann man auch Echtdaten über http übertragen.

Grüße Bernd

Thema: Dynamisches Json in Klasse mappen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich denke es ist ein Fehler in der Dateien Generierung. Denn einen Sinn sehe ich da nicht.

Ich muss jetzt basteln. Wenn der Fehler behoben wird wäre das aber kein Problem für den Workaround.

Aber so klappt das !


json = json.Replace("[[[", "[[[[").Replace("[[[[[", "[[[[").Replace("]]]", "]]]]").Replace("]]]]]", "]]]]").Replace("]]]],[[[[", "]]],[[[");
GeoJsonAreas areas = JsonConvert.DeserializeObject<GeoJsonAreas>(json);
foreach (GeoJsonFeature area in areas.features) ...

Danke für die Antworten,

Grüße Bernd

Thema: Dynamisches Json in Klasse mappen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen


Hallo Abt,

das habe ich befürchtet. Trotzdem danke für die Info.

Herausgeber der Datei ist IF-Core IT Services GmbH (OpenDataLab), eine kleine Softwarefirma in 74254 Offenau. Warum die das so machen erschließt sich mir nicht, denn es wäre an dieser Stelle überhaupt nicht nötig. Man könnte die Liste immer vierfach verschachteln. Wenn die Gemeinde nur einen Polygon enthält reicht es ja in der einen Liste nur ein Element anzulegen.

Vielleicht ist das keine Absicht sondern ein Fehler im Programm ?

Dann ändere ich lieber direkt in der Json-Datei. Ich muss ja nur "coordinates":[[[ in "coordinates":[[[[ ändern. Und "]]]" in "]]]]".

Grüße Bernd

PS.: Ich zeichne die Landkreise in eine Landkarte ein, das klappt echt gut ! Und man lernt noch was in Geografie ! Die nächste Aufgabe ist es festzustellen ob ich mich im Landkreis befinde oder nicht (Point in Polygon).

Thema: Dynamisches Json in Klasse mappen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

ich habe eine Json-Datei die je nach Element verschiedene Typen enthält. Wie kann ich eine Json-Datei mal in eine Klasse mal in eine andere Klasse mappen ?

Ich arbeite mit Newtonsoft.

Quelle der Json-Datei : http://download.seven-c.de/files/finderwille-frankfurt/einsatz-app/geojson/Hessen_Landkreise.geojson

Die Datei kommt hierher : http://opendatalab.de/projects/geojson-utilities/

Wenn ich mit Json-Util eine Klasse erzeuge kommt mal das eine mal das andere raus.

Der Unterschied liegt in der Klasse GeoJsonGeometry1/2, da sind die Koordinaten einmal eine dreifach verschachtelte Liste, einmal vierfach.
Liegt wohl daran dass es Landkreisgrenzen gibt die aus einem Polygon bestehen und die Bergstraße besteht z.B. aus 3 Plygonen.

Ich würde gerne in Klassen mappen ohne in den Json-Dateien rumzufuddeln.

Grüße Bernd


// Landkreise außer Bergstraße

	public class GeoJsonProperties1
	{
		public string name { get; set; }
	}

	public class GeoJsonCrs1
	{
		public string type { get; set; }
		public GeoJsonProperties1 properties { get; set; }
	}

	public class GeoJsonGeometry1
	{
		public string type { get; set; }
		public IList<IList<IList<double>>> coordinates { get; set; }
	}

	public class GeoJsonFeature1
	{
		public string type { get; set; }
		public GeoJsonProperties1 properties { get; set; }
		public GeoJsonGeometry1 geometry { get; set; }
	}

	public class GeoJson1
	{
		public string type { get; set; }
		public GeoJsonCrs1 crs { get; set; }
		public string source { get; set; }
		public IList<GeoJsonFeature1> features { get; set; }
	}

	// Bergstraße

	public class GeoJsonProperties2
	{
		public string name { get; set; }
	}

	public class GeoJsonCrs2
	{
		public string type { get; set; }
		public GeoJsonProperties2 properties { get; set; }
	}

	public class GeoJsonGeometry2
	{
		public string type { get; set; }
		public IList<IList<IList<IList<double>>>> coordinates { get; set; }
	}

	public class GeoJsonFeature2
	{
		public string type { get; set; }
		public GeoJsonProperties2 properties { get; set; }
		public GeoJsonGeometry2 geometry { get; set; }
	}

	public class GeoJson2
	{
		public string type { get; set; }
		public GeoJsonCrs2 crs { get; set; }
		public string source { get; set; }
		public IList<GeoJsonFeature2> features { get; set; }
	}

Thema: .NET wird 20 Jahre alt
Am im Forum: Szenenews


Ich habe im Jahr 2003 bei einer neuen Firma angefangen die Microsoft Produkte eingesetzt hat. Vorher hatte ich mit dem Datenbanksystem CONZEPT 16 gearbeitet, das eine Pascal ähnliche Programmiersprache hatte.

Damals habe ich mit Visual Studio 2003 angefangen und das hat mit gleich gut gefallen. Viele Sachen gab es damals nicht und die mussten wir nachprogrammieren :

Formulargenerator
Virtuelles Listview
ORM
Update System

Einige Sachen von damals nutze ich heute noch.

Grüße Bernd

Thema: Welche UI-Technologie von MS einsetzen???
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Zitat von jogibear9988
Hat sich jemand auch das schon mal angeschaut:
Avalonia UI

Das sieht ja interessant aus ! Muss ich mir mal anschauen !

Grüße Bernd

Thema: Wie Single App mit einer einzelnen Exe erstellen?
Am im Forum: Grundlagen von C#


Zwischen VB und C# gibt es da keinen Unterschied.

Es reicht die Exe und die DLL's die Du benutzt weiter zu geben.

Wie Abt schon gesagt hat ist es besser eine Release-Version zu erstellen und diese weiterzugeben.

Grüße Bernd

Thema: MS SQL Spaltenname mit case sensitivity
Am im Forum: Datentechnologien


Spaltennamen automatisch nach Parametern anzulegen finde ich gefährlich.

Es gibt zum einen Sonderzeichen die einem das Leben schwer machen können und auch reservierte Wörter.

Ich würde auch ein Mapping durchführen dass die Parameter Namen auf gültige Spaltennamen mappt.

Grüße Bernd

Thema: TicTacToe Gewinnüberprüfung
Am im Forum: Rund um die Programmierung

Hallo gfoidl,

Du überprüfst den Gewinner mit Pattern.

Ich habe das immer in Schleifen gemacht :


for (int x = 0; x < 3; x++)                  // Spalten
    for (int y = 0; y < 3; y++)              // Zeile
        for (int dir = 0; dir < 3; dir++)    // Richtung
        {
            bool gewinn = true;
            for (int anz = 0; anz < 3; anz++)     // Anzahl Steine
                if (Field(x + anz * Step(dir), y + anz * Step(dir) != "X")
                    gewinn = false;
        }

Ohne Gewähr !

Ich habe immer mit eindimensionalen Arrays gearbeitet : int[] board = new int[9];

Oder int[] board = new int[25]; wenn man das Spielfeld größer macht und einen Rahmen außen rum mit -1 für nicht betretbar belegt.
So vermeidet einen Überlauf wenn das Feld so aussieht :

- - X
X X O
O O -

Wenn man dann das Spielfeld auf 19 x 19 erweitert und die Anzahl Steine für Gewinn auf 5 hätte man schon Gobang programmiert.

Mit Minimax-Strategie hab ich auch immer gearbeitet, geht bei Gobang auch gut !

Grüße Bernd

Thema: TicTacToe Gewinnüberprüfung
Am im Forum: Rund um die Programmierung


Das reicht nicht. Es könnte auch in der oberen Zeile ein Dreier sein.

Grüße Bernd

Thema: TicTacToe Gewinnüberprüfung
Am im Forum: Rund um die Programmierung

Zwei-Personen-Nullsummenspiele hab ich früher viele programmiert : Gobang, Go, Mühle. Noch in BASIC und 8 KB RAM.

Um einen Gewinn festzustellen gehe alle Zeilen und Spalten durch und schau ob sie gleiche Steine haben.
Dann noch die zwei Diagonalen.


for (int i = 0; i < 3; i++)

Grüße Bernd

Thema: Listview Spalten sortieren
Am im Forum: GUI: Windows-Forms


Bei Datumsfeldern auch in datetime casten und dann vergleichen.

Ich würde kein TryParse benutzen. sondern in einer eigenen Tabelle oder in der Tag-Eigenschaft der Spalte den Datentyp hinterlegen.
Es können ja auch Zahlen in string Spalten stehen : Artikelnummer, Hausnummer, Postleitzahl etc.
auch funktioniert deine Routine nicht wenn in einer Zelle eine Zahl steht und in der zweiten nicht.

Obwohl listview schon sehr veraltet ist nutze ich das fleißig und klappt immer gut.

Man kann sogar ein listview so bauen dass es virtuell lädt, also bei 1 Mio. Datensätzen schon nach 1 Sekunde ein Ergebnis anzeigt (Lazy Load).

Grüße Bernd

Thema: SQL String Handling
Am im Forum: Datentechnologien

Zitat von gfoidl
So ist es ein Musterbeispiel für SQL-Injection

Hab ich mir gedacht dass das gleich auffällt.

Das habe ich ungefähr im Jahr 2004 geschrieben, da gab es den guten Artikel noch nicht.

In der Extension 'ToSqlString()' habe ich zwar versucht alles rauszufiltern was zu Fehlern oder Missbrauch führen kann, hat aber nicht immer funktioniert.

Das eigene ORM arbeitet natürlich mit Parametern.

Grüße Bernd

Thema: SQL String Handling
Am im Forum: Datentechnologien

Das wollte ich auch schreiben.

Ich schreibe keinen SQL Code mehr, sondern lasse das vom ORM machen. So ist alles aufgeräumt, typsicher und selbstdokumentierend.

Weiterentwicklung und Fehlersuche ist auch viel einfacher.



Alt : if (such_ar_bez1 != "") sqlstr += "ar_bez1 LIKE '" + such_ar_bez1.ToSqlString() + "' AND ";

Neu : if (such_ar_bez1 != "") qry = qry.ar_bez1().IsLike(such_ar_bez1).And();


Das ist jetzt ein eigenes ORM, jetzt würde ich aber Dapper oder EF benutzen.

Grüße Bernd

Thema: StackOverflowException fangen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Das ist der Nachteil wenn man externe Bibliotheken verwendet.

Da macht man folgendes :

  • Den Autor der Bibliothek informieren
  • Schauen ob es ein Update der Bibliothek gibt
  • Schauen ob jemand anders den Fehler auch hat
  • Einen Workaround suchen
  • Versuchen den Fehler einzugrenzen
  • Letzte Möglichkeit : Andere Bibliothek suchen oder selber programmieren

Grüße Bernd

Thema: StackOverflowException fangen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Stackoverflow (und auch MemoryOverflow) kann man nicht abfangen.

Da der Stack recht groß ist kommt der Stackoverflow meistens durch unendliche Rekursion zustande.

Prüf das mal.

Man kann aber Stackgröße und Speicherverbrauch prüfen und eine Meldung bringen "Programm bitte neu starten" wenn die Werte zu groß sind. So stürzt die Anwendung nicht ab und dem Anwender gehen keine Daten verloren.

Ich habe das mal so gemacht bis ich ein Memory Leak in der Winforms Anwendung entdeckt habe.

Grüße Bernd

Thema: Manuelle Framenwork Installation noch benötigt unter Win 10
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Bei Windows 10 kommt eine Meldung wenn man eine .NET Applikation mit .NET Framework 2.0 oder 3.5 installieren will.

Man kann dann das Framework Online installieren, es werden ca. 400 MB geladen.

Offline Installation geht auch wenn man kein Internet hat.

Bei früheren Windows Versionen kommt nur eine Meldung dass das Framework erforderlich ist und nicht installiert ist.

Grüße Bernd

Thema: Manuelle Framenwork Installation noch benötigt unter Win 10
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)


Es kommt eine Meldung dass das Framework nicht installiert ist und eine Abfrage ob es installiert werden soll.

Schlecht ist nur wenn man kein Internet hat.

Grüße Bernd

Thema: HTML Mails Format
Am im Forum: Web-Technologien

Ich erstelle die Mailvorlagen mit einem HTML Editor.

Da gibt es viele Fertige.

Grüße Bernd

Thema: Best Practice Sortierung
Am im Forum: Rund um die Programmierung

Wenn Du die Artikel in einer ListView anzeigst kannst Du den ListViewItemSorter nehmen, der Anwender kann dann auf einen Spaltentitel klicken und die Liste wird danach sortiert.
So wie man es von allen Windows Programmen gewöhnt ist. Beim zweiten Klick auf die Spalte wird dann umgekehrt sortiert.

Sortieren von ListView mithilfe einer Spalte in C # - C#

Neue Artikel einfach am Ende einfügen und dann die Liste neu sortieren. Das ist einfacher als beim Einfügen den richtigen Platz zu suchen.

Wenn Du einen Sortieralgorithmus selber implementieren willst schau nach Bubble Sort. Das geht im Speichern recht fix.

Grüße Bernd