简体   繁体   English

反序列化字符串XML和错误:XML文档中存在错误(1、2)

[英]Deserializing a string XML and error:There is an error in XML document (1, 2)

I need deseriliazing a string XML, but I've a problem. 我需要反序列化字符串XML,但是我遇到了问题。

[XMLRoot]
public class OP
{
    [XmlElement]
    public string Auth;
    [XmlElement]
    public string User;
    [XmlElement]
    public string Password;
    [XmlElement]
    public string Client;
    [XmlElement]
    public string DownloadCode;
    [XmlElement]
    public string PartNumber;
    [XmlElement]
    public int FlexPO;
    [XmlArray]
    public string Terminals;
    [XmlElement]
    public string User;            
}

public void Test()
{
    var serializer = new XmlSerializer(typeof(OP));
    OP result;

    using (TextReader reader = new StringReader(XML))
    {
        result = (OP)serializer.Deserialize(reader);
    }

}

This is code and this is the XML: 这是代码,这是XML:

<CreateManufactoryOrder xmlns="http://tempuri.org/">
    <op>
        <Auth>
            <User>User</User>
            <Password>Password</Password>
        </Auth>
        <Client>01425787000104</Client>
        <DownloadCode>0460.0001</DownloadCode>
        <PartNumber>M268-773-C4-BRA-3</PartNumber>
        <FlexPO>887614_364</FlexPO>
        <Terminals>
            <String>529-995-835</String>
            <String>529-995-836</String>
            <String>529-995-837</String>
            <String>529-995-838</String>
        </Terminals>
    </op>
</CreateManufactoryOrder>

So, when I debug the code return error: There is an error in XML document (1, 2). 因此,当我调试代码返回错误时:XML文档(1、2)中存在错误。 I already try change the code in much ways, but nothing did run. 我已经尝试过以多种方式更改代码,但是没有任何运行。

You need to specify the root element name and namespace, update your [XmlRoot] attribute to be like so: 您需要指定根元素名称和名称空间,更新[XmlRoot]属性,如下所示:

[XmlRoot(ElementName = "CreateManufactoryOrder", Namespace= "http://tempuri.org/")]

I verified it now deserializes without issue after adding that. 添加后,我验证了它现在可以反序列化而不会出现问题。

Try this 尝试这个

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Xml; using System.Xml.Serialization; namespace ConsoleApplication1 { class Program { const string FILENAME = @"c:\\temp\\testxml"; static void Main(string[] args) { CreateManufactoryOrder createManufacturyOrder = new CreateManufactoryOrder() { op = new Op(){ auth = new Auth(){ user = "User", password = "Password" }, client = "01425787000104", downLoadCode = "0460.0001", partNumber = "M268-773-C4-BRA-3", flexPO = "887614_364", terminals = new List<Terminal>(){ new Terminal(){ m_String = "529-995-835"}, new Terminal(){ m_String = "529-995-836"}, new Terminal(){ m_String = "529-995-837"}, new Terminal(){ m_String = "529-995-838"} } } }; Test(createManufacturyOrder); } static public void Test(CreateManufactoryOrder createManufacturyOrder) { StreamWriter writer = new StreamWriter(FILENAME); XmlSerializer serializer = new XmlSerializer(typeof(CreateManufactoryOrder)); serializer.Serialize(writer, createManufacturyOrder); writer.Flush(); writer.Close(); writer.Dispose(); string XML = File.ReadAllText(FILENAME); using (TextReader reader = new StringReader(XML)) { CreateManufactoryOrder result = (CreateManufactoryOrder)serializer.Deserialize(reader); } } } [XmlRoot("CreateManufactoryOrder")] public class CreateManufactoryOrder { [XmlElement("op")] public Op op { get; set; } } [XmlRoot("op")] public class Op { [XmlElement("Auth")] public Auth auth { get; set; } [XmlElement("Client")] public string client; [XmlElement("DownloadCode")] public string downLoadCode { get; set; } [XmlElement("PartNumber")] public string partNumber { get; set; } [XmlElement("FlexPO")] public string flexPO { get; set; } [XmlElement("Terminals")] public List<Terminal> terminals { get; set; } } [XmlRoot("Auth")] public class Auth { [XmlElement("User")] public string user { get; set; } [XmlElement("Password")] public string password { get; set; } } public class Terminal { [XmlElement("String")] public string m_String { get; set; } } }​ 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM