निम्नलिखित कोड में, मैं एक ऑब्जेक्ट स्ट्रिंग में एक ऑब्जेक्ट को क्रमबद्ध करता हूं।मुझे इस XML स्ट्रिंग को कैसे बदलना है ताकि XDocument.Parse इसे पढ़ सके?
लेकिन जब मैं XDocument.Parse के साथ एक XDocument में इस XML स्ट्रिंग पढ़ने की कोशिश, यह मेरे इस त्रुटि देता है: रूट स्तर पर
अमान्य डेटा।
एक्सएमएल है:
<?xml version="1.0" encoding="utf-8"?>
<Customer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Id>1</Id>
<FirstName>Jim</FirstName>
<LastName>Jones</LastName>
<ZipCode>23434</ZipCode>
</Customer>
अद्यतन:
alt text http://www.deviantsart.com/upload/hhcvmu.png
क्या मैं इतना है कि यह में पढ़ता है इस XML करने के लिए मुझे क्या करना होगा: यहाँ हेक्स है एक त्रुटि के बिना XDocument?
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.IO;
using System.Xml;
using System.Text;
using System.Xml.Linq;
namespace TestSerialize2342
{
class Program
{
static void Main(string[] args)
{
List<Customer> customers = Customer.GetCustomers();
Console.WriteLine("--- Serializing ------------------");
foreach (var customer in customers)
{
Console.WriteLine("Serializing " + customer.GetFullName() + "...");
string xml = XmlHelpers.SerializeObject<Customer>(customer);
XDocument xdoc = XDocument.Parse(xml);
}
Console.ReadLine();
}
}
public static class StringHelpers
{
public static String UTF8ByteArrayToString(Byte[] characters)
{
UTF8Encoding encoding = new UTF8Encoding();
String constructedString = encoding.GetString(characters);
return (constructedString);
}
public static Byte[] StringToUTF8ByteArray(String pXmlString)
{
UTF8Encoding encoding = new UTF8Encoding();
Byte[] byteArray = encoding.GetBytes(pXmlString);
return byteArray;
}
}
public static class XmlHelpers
{
public static string SerializeObject<T>(object o)
{
MemoryStream ms = new MemoryStream();
XmlSerializer xs = new XmlSerializer(typeof(T));
XmlTextWriter xtw = new XmlTextWriter(ms, Encoding.UTF8);
xs.Serialize(xtw, o);
ms = (MemoryStream)xtw.BaseStream;
return StringHelpers.UTF8ByteArrayToString(ms.ToArray());
}
public static T DeserializeObject<T>(string xml)
{
XmlSerializer xs = new XmlSerializer(typeof(T));
MemoryStream ms = new MemoryStream(StringHelpers.StringToUTF8ByteArray(xml));
XmlTextWriter xtw = new XmlTextWriter(ms, Encoding.UTF8);
return (T)xs.Deserialize(ms);
}
}
public class Customer
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Street { get; set; }
public string Location { get; set; }
public string ZipCode { get; set; }
private int internalValue = 23;
public static List<Customer> GetCustomers()
{
List<Customer> customers = new List<Customer>();
customers.Add(new Customer { Id = 1, FirstName = "Jim", LastName = "Jones", ZipCode = "23434" });
customers.Add(new Customer { Id = 2, FirstName = "Joe", LastName = "Adams", ZipCode = "12312" });
customers.Add(new Customer { Id = 3, FirstName = "Jack", LastName = "Johnson", ZipCode = "23111" });
customers.Add(new Customer { Id = 4, FirstName = "Angie", LastName = "Reckar", ZipCode = "54343" });
customers.Add(new Customer { Id = 5, FirstName = "Henry", LastName = "Anderson", ZipCode = "16623" });
return customers;
}
public string GetFullName()
{
return FirstName + " " + LastName + "(" + internalValue + ")";
}
}
}
उत्तर:
धन्यवाद एनड्रास, GetPreamble(), यह तय तो किसी और को इस से निपटने के लिए, यहाँ बीओएम की अपनी XML साफ करने के लिए एक छोटे से विधि है:
public static string RemoveUtf8ByteOrderMark(string xml)
{
string byteOrderMarkUtf8 = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble());
if (xml.StartsWith(byteOrderMarkUtf8))
{
xml = xml.Remove(0, byteOrderMarkUtf8.Length);
}
return xml;
}
उस XML के साथ कुछ भी गलत नहीं है। क्या आप वाकई एक ही एक्सएमएल हैं जो अपवाद पैदा कर रहा है? –
रूट स्तर, लाइन 1, वर्ण 1 पर अमान्य डेटा। जब मैं टेक्स्ट को नोटपैड ++ में कॉपी करता हूं, तो पहला अक्षर "?" होता है और अन्य संपादकों में कुछ नियंत्रण चरित्र ... –
फिर आप कट और पेस्ट के दौरान खुले "<" खो गए। एक्सएमएल के साथ कुछ भी गलत नहीं है। –