Autor Wątek: MONO C# - Problem z serializacja obiektow  (Przeczytany 1876 razy)

Offline rastabaddon

  • Użytkownik

# Grudzień 12, 2015, 14:50:21
Czy ktoś spotkał się z bledną serializacja obiektów  w mono?

Kod
----------------------------------------------------------
namespace QCCTV
{
[XmlRoot("AppSetting")]
public class AppSettings
{

public bool toolboxVisible = false;
public List<DeviceSetting> deviceSettings = null;



public AppSettings ()
{
toolboxVisible = false;
deviceSettings = new  List<DeviceSetting>();

}

public void SaveToFile (string path)
{
try {
var serializer = new XmlSerializer (typeof(AppSettings));


using (var file = new FileStream(path, FileMode.OpenOrCreate)) {
using (StreamWriter stream = new StreamWriter(file, Encoding.UTF8)) {
Console.WriteLine (stream.ToString ());
serializer.Serialize (stream, this);
}

}



Console.WriteLine ("Settings save to: " + path + " ");

} catch (Exception e) {
Console.WriteLine ("Can`t save settings: " + path + " " + e.Message);

}
}


public static AppSettings LoadFromFile (string path)
{
try {
var serializer = new XmlSerializer (typeof(AppSettings));
AppSettings settings = null;

using (var file = new FileStream(path, FileMode.Open)) {
using (StreamReader stream = new StreamReader(file, Encoding.UTF8)) {
settings = serializer.Deserialize (stream) as AppSettings;
}
}

Console.WriteLine ("Settings loaded from: " + path + " ");

return settings;

} catch (Exception e) {
Console.WriteLine ("Can`t load settings: " + path + " " + e.Message);

}
return new AppSettings();
}
}
}

------------------------------------------------------------

Wynik powinnien byc jak ponizej

<?xml version="1.0" encoding="utf-8"?>
<AppSetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <toolboxVisible>false</toolboxVisible>
  <deviceSettings>
    <DeviceSetting>
      <DeviceName>CAM1</DeviceName>
      <DriverName>JPG Camera Driver</DriverName>
      <DeviceURI>192.168.161.2</DeviceURI>
      <DeviceLogin>admin</DeviceLogin>
      <DevicePassword>Abra0906</DevicePassword>
    </DeviceSetting>
    <DeviceSetting>
      <DeviceName>CAM2</DeviceName>
      <DriverName>JPG Camera Driver</DriverName>
      <DeviceURI>192.168.161.7</DeviceURI>
      <DeviceLogin>admin</DeviceLogin>
      <DevicePassword>Abra0906</DevicePassword>
    </DeviceSetting>
    <DeviceSetting>
      <DeviceName>CAM3</DeviceName>
      <DriverName>MJPG Camera Driver</DriverName>
      <DeviceURI>192.168.1.10</DeviceURI>
      <DeviceLogin>admin</DeviceLogin>
      <DevicePassword>Abra0906</DevicePassword>
    </DeviceSetting>
    <DeviceSetting>
      <DeviceName>CAM4</DeviceName>
      <DriverName>USB Camera Driver</DriverName>
      <DeviceURI />
      <DeviceLogin />
      <DevicePassword />
    </DeviceSetting>
  </deviceSettings>
</AppSetting>

---------------------------------------------------------------
Ale czasami plik ma błędy np.
---------------------------------------------------------------

<?xml version="1.0" encoding="utf-8"?>
<AppSetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <toolboxVisible>false</toolboxVisible>
  <deviceSettings>
    <DeviceSetting>
      <DeviceName>CAM1</DeviceName>
      <DriverName>JPG Camera Driver</DriverName>
      <DeviceURI>192.168.161.2</DeviceURI>
      <DeviceLogin>admin</DeviceLogin>
      <DevicePassword>Abra0906</DevicePassword>
    </DeviceSetting>
    <DeviceSetting>
      <DeviceName>CAM2</DeviceName>
      <DriverName>JPG Camera Driver</DriverName>
      <DeviceURI>192.168.161.7</DeviceURI>
      <DeviceLogin>admin</DeviceLogin>
      <DevicePassword>Abra0906</DevicePassword>
    </DeviceSetting> Setting>
    <DeviceSetting>
      <DeviceName>CAM3</DeviceName>
      <DriverName>MJPG Camera Driver</DriverName>
      <DeviceURI>192.168.1.10</DeviceURI>
      <DeviceLogin>admin</DeviceLogin>
      <DevicePassword>Abra0906</DevicePassword>
    </DeviceSetting>
    <DeviceSetting>
      <DeviceName>CAM4</DeviceName>
      <DriverName>USB Camera Driver</DriverName>
      <DeviceURI />
      <DeviceLogin />
      <DevicePassword />
    </DeviceSetting>
  </deviceSettings>
</AppSetting> pSetting>

--------------------------------------------------------------
Podejrzewam kodowanie znaków. (ale niby zapisuje jako UTF8)
Nie używam wątków, wiec raczej niemożliwe jest żeby dwa watki zapisywały te same dane do pliku.

--------------------------------------------------------------
Nie mam pomysłu wiec wszystko idee mile widziane

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline koirat

  • Użytkownik

# Grudzień 12, 2015, 15:15:40
Chodzi ci o to
</DeviceSetting> Setting> 
« Ostatnia zmiana: Grudzień 12, 2015, 15:17:46 wysłana przez koirat »

Offline rastabaddon

  • Użytkownik

# Grudzień 12, 2015, 15:20:31
Dokladnie, i podobne rzeczy. (ni z dup** ni z piet*) przy serializacji gdzie w pliku mam kawalki xml . taki poszatkowany xml

Offline Dab

  • Redaktor
    • blog

  • +3
# Grudzień 12, 2015, 16:19:29
Problemem nie jest serializacja, tylko FileMode.OpenOrCreate. W tym trybie jeżeli plik już istnieje to jego zawartość zostaje stopniowo nadpisywana. Jeżeli wcześniej plik był dłuższy, to na końcu nowej zawartości zostaną śmieci (co ewidentnie widać w tym przypadku). Rozwiązanie: FileMode.Create.

Offline rastabaddon

  • Użytkownik

# Grudzień 13, 2015, 00:51:35
Dziękuje. Faktycznie tu tkwi błąd.