Deserialize from string instead TextReader

前端 未结 5 1766
没有蜡笔的小新
没有蜡笔的小新 2020-12-07 14:12

I want to change my code from:

string path = @\"c:\\Directory\\test.xml\";
XmlSerializer s = new XmlSerializer(typeof(Car));

TextReader r = new StreamReader         


        
相关标签:
5条回答
  • 2020-12-07 14:46

    1-liner, takes a XML string text and YourType as the expected object type. not very different from other answers, just compressed to 1 line:

    var result =  (YourType)new XmlSerializer(typeof(YourType)).Deserialize(new StringReader(text));
    
    0 讨论(0)
  • 2020-12-07 14:55
    public static string XmlSerializeToString(this object objectInstance)
    {
        var serializer = new XmlSerializer(objectInstance.GetType());
        var sb = new StringBuilder();
    
        using (TextWriter writer = new StringWriter(sb))
        {
            serializer.Serialize(writer, objectInstance);
        }
    
        return sb.ToString();
    }
    
    public static T XmlDeserializeFromString<T>(this string objectData)
    {
        return (T)XmlDeserializeFromString(objectData, typeof(T));
    }
    
    public static object XmlDeserializeFromString(this string objectData, Type type)
    {
        var serializer = new XmlSerializer(type);
        object result;
    
        using (TextReader reader = new StringReader(objectData))
        {
            result = serializer.Deserialize(reader);
        }
    
        return result;
    }
    

    To use it:

    //Make XML
    var settings = new ObjectCustomerSettings();
    var xmlString = settings.XmlSerializeToString();
    
    //Make Object
    var settings = xmlString.XmlDeserializeFromString<ObjectCustomerSettings>(); 
    
    0 讨论(0)
  • 2020-12-07 14:57

    If you have the XML stored inside a string variable you could use a StringReader:

    var xml = @"<car/>";
    var serializer = new XmlSerializer(typeof(Car));
    using (var reader = new StringReader(xml))
    {
        var car = (Car)serializer.Deserialize(reader);
    }
    
    0 讨论(0)
  • 2020-12-07 15:02

    Shamelessly copied from Generic deserialization of an xml string

        public static T DeserializeFromXmlString<T>(string xmlString)
        {
            var serializer = new XmlSerializer(typeof(T));
            using (TextReader reader = new StringReader(xmlString))
            {
                return (T) serializer.Deserialize(reader);
            }
        }
    
    0 讨论(0)
  • static T DeserializeXml<T>(string sourceXML) where T : class
    {
        var serializer = new XmlSerializer(typeof(T));
        T result = null;
    
        using (TextReader reader = new StringReader(sourceXML))
        {
            result = (T) serializer.Deserialize(reader);
        }
    
        return result;
    }
    
    0 讨论(0)
提交回复
热议问题