2017-09-13 39 views
0

我想使用StreamReader的等價物讀取/序列化xml(不是從文件中檢索,而是作爲字符串中的參數傳遞)。將xml字符串作爲參數轉換爲使用streamReader等效的類

這裏是我的類:

public class FH 
    { 
     public FH(); 

     public bool AllowD { get; set; } 
     public string C_ID { get; set; } 
     public string CS_ID { get; set; } 
     public FileType FT { get; set; } 
     public int G_CK { get; set; } 
     public string G_ID { get; set; } 
     public bool IsR { get; set; } 
     [DefaultValue(-1)] 
     public int S_CK { get; set; } 
     public string S_ID { get; set; } 
    } 

這裏是我的方法:

public static FH SerializeXMLString (string xmlstring) 
      { 

      string path = xmlstring; 
     FH xmloutput = null; 


        XmlSerializer serializer = new XmlSerializer(typeof(FH)); 


        StreamReader reader = new StreamReader(path); 


        xmloutput = (FH)serializer.Deserialize(reader); 
        reader.Close(); 

        return xmloutput ; 
      } 

的XML(字符串)是:

<FH> 
    <G_ID>XRY</G_ID> 
    <G_CK>8</G_CK> 
    <CS_ID>RR03</CS_ID> 
    <C_ID>YX</CI_ID> 
    <AllowD>false</AllowD> 
    <S_ID>1888655</S_ID> 
    <S_CK>25650</S_CK> 
    <FT> 
    <ID>55</ID> 
    <Name>MI</Name> 
    <Purp>Change</Purp> 
    </FT> 
    <IsR>true</IsR> 
</FH> 

我意識到,StreamReader的是要用於閱讀文件和期望的路徑,但想知道是否有一個相當於我可以用我的xmlstring並轉換爲我的班(FH)在返回之前。

非常感謝提前!

+0

這是什麼意思「返回之前」? – Vecchiasignora

+0

在我的方法(SerializeXMLString)中,我需要將xmlstring轉換爲我的類(FH)。這需要在方法返回FH之前完成。 – AMorrisey

+0

什麼是你的問題?在這部分? xmloutput =(FH)serializer.Deserialize(reader); reader.Close(); return xmloutput; – Vecchiasignora

回答

0
[Serializable] 
[XmlType(TypeName = "FH")] 
public class FH 
{ 
    public string G_ID{ get; set; } 
    public string G_CK{ get; set; } 
    public string CS_ID{ get; set; } 
    public string C_ID{ get; set; } 
    public bool AllowD{ get; set; } 
    public string S_ID{ get; set; } 
    public string S_CK{ get; set; } 
    public FT FT { get; set; } 
    public bool IsR{ get; set; } 
} 


[Serializable] 
public class FT 
{ 
    public string ID{ get; set; } 
    public string Name{ get; set; } 
    public string Purp{ get; set; } 
} 

首先你應該使用泛型方法。將一個xml反序列化到另一個類時,你會做什麼?你可以看看這個例子。

var response = XmlSampleHelper.SerializeXMLString<FH>(xmlstring, null); 

和通用SerializeXMLString方法,

public static T SerializeXMLString<T>(string xmlstring, string schemaPath) 
    { 
     var serializer = new XmlSerializer(typeof(T)); 
     TextReader reader = new StringReader(xmlstring); 

     if (!string.IsNullOrWhiteSpace(schemaPath)) 
      ValidateXmlDocument(reader, schemaPath); 

     return (T)serializer.Deserialize(new StringReader(xmlstring)); 
    } 

希望這有助於。