2014-01-21 4 views
0

У меня есть ArrayList с некоторыми объектами пользователя. Я пытаюсь их сериализовать в формате XML, который я могу отправить на веб-сервер. Формат должен быть UTF 8.Unity C# ArrayList объектов Сериализация в XML Utf8 - Примитивная ошибка

Я постоянно работает в эту ошибку:

The type of the argument object 'User' is not primitive. 

Это эффективно две проблемы, однако основной один в том, что эта примитивная ошибка не будет препятствовать мне попробовать и другие веб-примеры для utf8. Я просто не понимаю, почему он это делает. Я попытался с помощью:

[Serializable] 

В настоящее время у меня есть функция, которая будет работать, но это не будет делать XML в формат utf8. И когда я пытаюсь использовать другие примеры в Интернете, я получаю эту примитивную ошибку. Ниже мой текущий код:

Мой класс Пользователь:

using System; 
    using System.Xml; 
    using System.Xml.Serialization; 


    [Serializable] 
    public class User 
    { 
public int UserID { get; set; } 

public string Name { get; set; } 

public string Password { get; set; } 

public DateTime DateCreated { get; set; } 

public string DeviceMacAddr { get; set; } 

public DateTime LastLoggedIn { get; set; } 

public float LastLoggedLat { get; set; } 

public float LastLoggedLong { get; set; } 

public bool Active { get; set; } 

public string SyncStatus { get; set; } 

public DateTime LastSyncDate { get; set; } 
    } 

Мой XML написание сценария:

using UnityEngine; 
    using System; 
    using System.Collections; 
    using System.Text; 
    using System.IO; 
    using System.Xml; 
    using System.Xml.Serialization; 
    using System.Collections.Generic; 



    public class XmlWriting : MonoBehaviour { 

     private string formatString = "'yyyy'##'MM'##'dd' 'HH'*'mm'*'ss'"; 
     [XmlAttribute("Users")] 
     ArrayList Users = new ArrayList(); 


     //List<User> Users = new List<User>(); 

     // Use this for initialization 
     void Start() { 


      Users.Add(new User { UserID = 1, 
             Name = "Test Woman", 
             Password = "aa", 
             DateCreated = DateTime.Now, 
             DeviceMacAddr = "24:70:8c:83:86:BD", 
             LastLoggedIn = DateTime.Now, 
             LastLoggedLat = 36.083101f, 
             LastLoggedLong = -11.263433f, 
             Active = true, 
             SyncStatus = "Awaiting Response", 
             LastSyncDate = DateTime.Now, 
            } 
      ); 
      Users.Add(new User { UserID = 2, 
             Name = "Test Man", 
             Password = "aa", 
             DateCreated = DateTime.Now, 
             DeviceMacAddr = "74:21:0c:93:46:XD", 
             LastLoggedIn = DateTime.Now, 
             LastLoggedLat = 83.083101f, 
             LastLoggedLong = -3.261823f, 
             Active = true, 
             SyncStatus = "Complete", 
             LastSyncDate = DateTime.Now, 
            } 
      ); 

      var serializer = new XmlSerializer(typeof(ArrayList)); 

      var memoryStream = new MemoryStream(); 
      var streamWriter = new StreamWriter(memoryStream, System.Text.Encoding.UTF8); 

      serializer.Serialize(streamWriter, Users); 

      byte[] utf8EncodedXml = memoryStream.ToArray(); 
      Debug.Log ("SerializeArrayList: ");//+ utf8EncodedXml); 


     } 


     // Update is called once per frame 
     void Update() { 

     } 


     private string SerializeArrayList(ArrayList obj) 
     { 
      XmlDocument doc = new XmlDocument(); 
      XmlSerializer serializer = new XmlSerializer(typeof(ArrayList), new Type[]{typeof(User)}); 
      using (MemoryStream stream = new System.IO.MemoryStream()) 
      { 
       try 
       { 
        serializer.Serialize(stream, obj); 
        stream.Position = 0; 
        doc.Load(stream); 
        Debug.Log ("stream: " + doc.InnerXml); 
        return doc.InnerXml; 
       } 
       catch (Exception ex) 
       { 
       } 
      } 
      return string.Empty; 
     } 

     public class Utf8StringWriter : StringWriter 
     { 
      public override Encoding Encoding 
      { 
       get { return Encoding.UTF8; } 
      } 
     } 


    } 

Любая помощь очень ценится. Спасибо

ответ

0

Вам необходимо поместить атрибут [Serializable] выше определений классов для пользователя и всех других классов, которые вы собираетесь сериализовать. Что касается UTF-8, это не должно иметь значения, по крайней мере, не логически - десериализатор C# на другой стороне должен обрабатывать любую кодировку прозрачно для вас.

Смежные вопросы