2012-08-14 78 views
0

我有一個類AuthUser轉換字符串到

public class AuthUser 
{ 
    public int UserID { get; set; } 
    public string UserNo { get; set; } 
    public string UserName { get; set; } 
    public string Password { get; set; } 
} 

我已轉換的類將string

AuthUser au = new AuthUser(); 
//dtUserDetails is a data table 
if (dtUserDetails.Rows.Count > 0) 
{ 
    DataRow DR = dtUserDetails.Rows[0]; 
    au.UserID = Convert.ToInt32(DR["UserID"].ToString()); 
    au.UserNo = DR["UserNo"].ToString(); 
    au.UserName = DR["UserName"].ToString(); 
    au.Password = DR["Password"].ToString(); 
} 
string userData = au.ToString(); 

現在我需要將上面的UserData字符串轉換回對象類型來檢索數據。我怎樣才能做到這一點?

+1

你檢查你的'au.ToString()獲得;'因爲你不重寫'的ToString()'爲類不會有任何有意義的左得到轉換回來! !但你爲什麼要這樣做? – V4Vendetta 2012-08-14 07:09:16

+1

第一次重寫'ToString()'方法並第二次研究序列化。 – 2012-08-14 07:10:41

回答

5

我假設你試圖持久化數據,然後從持久數據重建對象。查看Serialization

+0

哇! !這是他們所說的字符串之間的閱讀 – V4Vendetta 2012-08-14 07:10:54

0

試試這個

可以使這是一個匿名類型

public static string ObjectToXMLString(Object anyObject) 
{ 
    string XmlizedString = string.Empty; 
    XmlSerializer xs = null; 
    XmlTextWriter xmlTextWriter = null; 
    MemoryStream memoryStream = new MemoryStream(); 
    try 
    { 
     xs = new XmlSerializer(anyObject.GetType()); 
     xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.Unicode); 
     xs.Serialize(xmlTextWriter, anyObject); 
     memoryStream = (MemoryStream)xmlTextWriter.BaseStream; 
     XmlizedString = Encoding.Unicode.GetString(memoryStream.ToArray()); 
    } 
    catch 
    { 
     //Do nothing for now 
    } 
    finally 
    { 
     xmlTextWriter.Close(); 
     memoryStream.Close(); 
    } 
    return XmlizedString; 
} 

,並再次打開它

/// <summary> 
/// XMLs the string to object. 
/// </summary> 
/// <typeparam name="T">Object of target type</typeparam> 
/// <param name="xml">The XML.</param> 
/// <returns>Instance of target type object filled with corresponding xml data.</returns> 
public static T XMLStringToObject<T>(string xml) 
{ 
    // create default instance of the target type object 
    T targetObject = default(T); 

    // init serializer params 
    XmlSerializer ser = null; 
    StringReader stringReader = null; 
    XmlTextReader xmlReader = null; 
    try 
    { 
     // start deserialization of object 
     ser = new XmlSerializer(typeof(T)); 
     stringReader = new StringReader(xml); 
     xmlReader = new XmlTextReader(stringReader); 
     targetObject = (T)ser.Deserialize(xmlReader); 
    } 
    catch(Exception ex) 
    { 
     // determine what type of object was the target and a copy of the xml being tried and rethrow 
     throw new ArgumentException(String.Format("Exception while deseriliazing to object of type {0}.\n\n=== XML ========\n{1}", typeof(T), xml), ex); 
    } 
    finally 
    { 
     // always close readers to release objectToXMLString 
     xmlReader.Close(); 
     stringReader.Close(); 
    } 

    // return target objectToXMLString 
    return targetObject; 
} 
0

使用序列化,你可以這樣創建一個JsonSerilizer:

public static class JsonUtil 
{ 
    public static string Serialize<T>(T value) 
    { 
     using (var ms = new MemoryStream()) 
     { 
      var ser = new DataContractJsonSerializer(typeof(T)); 
      ser.WriteObject(ms, value); 
      byte[] json = ms.ToArray(); 
      ms.Close(); 
      return Encoding.UTF8.GetString(json, 0, json.Length); 
     } 
    } 

    public static T Deserialise<T>(string json) 
    { 
     using (var memoryStream = new MemoryStream(Encoding.Unicode.GetBytes(json))) 
     { 
      var serializer = new DataContractJsonSerializer(typeof(T)); 
      return (T)serializer.ReadObject(memoryStream); 
     } 
    } 

} 

使用方法如下:

// Create an object 
var dude = new Dude() { Id = 1, Name = "Joe Smith" }; 

// Turn it into a string 
var json = JsonUtil.Serialize<Dude>(dude); 

// Turn it back into an object 
var cloneDude = JsonUtil.Deserialise<Dude>(json);