2017-09-13 117 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)); 
    } 

希望这有助于。