xml 문서를 역 직렬화 할 수 있지만 동일한 문서로 직렬화 할 수 없음

이제는 이름이 지정되지 않아야합니다.

XMLDeserialization을 사용하여 xml 문서를 객체로 역 직렬화 할 수 있습니다. 그러나 XMLElement로 인해 객체를 xml 문서로 직렬화하려고 할 때 막혔습니다!

어떤 아이디어라도 대단히 감사합니다!

편집 : XmlDocument 또는 XDoc을 사용하여이 xml을 구성 할 수 있다는 것을 알고 있지만 직렬화를 수행하려면 기존 클래스를 사용해야합니다.

public class StackOverflow
{
    const string XML = @"<?xml version=""1.0""?>
                    <DietPlan>
                            <Fruit>fig</Fruit>
                            <Fruit>Apple</Fruit>
                            <Fruit>Peach</Fruit>
                    </DietPlan>";

    [XmlRoot(ElementName = "DietPlan")]
    public class TestData
    {
        [XmlAnyElement]
        public List<XmlElement> Fruits { get; set; }
    }

    public static void Deserialize()
    {
        var ms = new MemoryStream(Encoding.UTF8.GetBytes(XML));
        var xs = new XmlSerializer(typeof(TestData));
        var obj = (TestData)xs.Deserialize(ms);

    }

    public static void Serialize()
    {
        var fruitList = new List<string> { "fig", "Apple", "Peach", };
        var testData = new TestData();

        //How to populate testData with fruitlist ? (Because it is a list of xmlElements!)

    }
}
콜린 스미스

그것은 기존의 클래스를 수정하는 것은 불가능하고 사용하지 않을 경우 XMLDocument, XDocument명시 적으로 XML을 생성하는 등, 여기에 당신이 사용할 수있는 2 개 주요 기술은 다음과 같습니다 :

  • 직렬화에만 사용하는 올바른 XML 속성 및 유형이있는 동반 클래스를 작성하십시오. 즉, 원래 클래스 유형에서 새 유형으로 데이터를 복사 한 다음 새 클래스를 직렬화해야합니다.

  • 원래 클래스 XmlElements를 사용하고 더미를 사용하여 생성XmlDocument

이 예는 작동중인 두 기술을 보여줍니다.

또한 XML이 UTF-8로 명시 적으로 작성되도록에서 MemoryStreama를 사용하는 방법에 유의하십시오 StreamWriter( encoding="UTF-8"자동으로 입력 됨).

참조 XML에 대한 UTF-8 또는 UTF-16은 기본 인코딩을? ... XML을 인코딩하려는 다양한 방법에 대해 설명합니다.

namespace ConsoleApplication1
{
    [XmlRoot(ElementName = "DietPlan")]
    public class TestData
    {
        [XmlAnyElement]
        public List<XmlElement> Fruits { get; set; }
    }

    [XmlRoot(ElementName = "DietPlan")]
    public class TestDataForSerialization
    {
        [XmlElement(ElementName = "Fruit")]
        public List<string> Fruits { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            const string XML = @"<?xml version=""1.0"" encoding=""UTF-8""?>
                    <DietPlan>
                            <Fruit>fig</Fruit>
                            <Fruit>Apple</Fruit>
                            <Fruit>Peach</Fruit>
                    </DietPlan>";

            var ms = new MemoryStream(Encoding.UTF8.GetBytes(XML));

            TestData testdata1 = DeserializeFromStream<TestData>(ms);
            TestDataForSerialization testdata2 = DeserializeFromStream<TestDataForSerialization>(ms);
            TestData testdata3 = new TestData()
            {
                Fruits = new List<XmlElement>
                {
                    GetFruitElement("fig"),
                    GetFruitElement("Apple"),
                    GetFruitElement("Peach")
                }
            };
            TestDataForSerialization testdata4 = new TestDataForSerialization()
            {
                Fruits = new List<string> { "fig", "Apple", "Peach" }
            };
            TestDataForSerialization testdata5 = Convert(testdata1);

            MemoryStream msserialized1 = SerializeToStream<TestData>(testdata1);
            MemoryStream msserialized2 = SerializeToStream<TestDataForSerialization>(testdata2);
            MemoryStream msserialized3 = SerializeToStream<TestData>(testdata3);
            MemoryStream msserialized4 = SerializeToStream<TestDataForSerialization>(testdata4);
            MemoryStream msserialized5 = SerializeToStream(testdata5);

            string xml1 = Encoding.UTF8.GetString(msserialized1.ToArray());
            string xml2 = Encoding.UTF8.GetString(msserialized2.ToArray());
            string xml3 = Encoding.UTF8.GetString(msserialized3.ToArray());
            string xml4 = Encoding.UTF8.GetString(msserialized4.ToArray());
            string xml5 = Encoding.UTF8.GetString(msserialized5.ToArray());

            TestData testdata_deserialized1 = DeserializeFromStream<TestData>(msserialized1);
            TestData testdata_deserialized2 = DeserializeFromStream<TestData>(msserialized2);
            TestData testdata_deserialized3 = DeserializeFromStream<TestData>(msserialized3);
            TestData testdata_deserialized4 = DeserializeFromStream<TestData>(msserialized4);
            TestData testdata_deserialized5 = DeserializeFromStream<TestData>(msserialized5);

            TestData testdata_deserialized6 = DeserializeFromString<TestData>(xml1);
            TestData testdata_deserialized7 = DeserializeFromString<TestData>(xml2);
            TestData testdata_deserialized8 = DeserializeFromString<TestData>(xml3);
            TestData testdata_deserialized9 = DeserializeFromString<TestData>(xml4);
            TestData testdata_deserialized10 = DeserializeFromString<TestData>(xml5);
        }

        public static XmlElement GetFruitElement(string fruit)
        {
            XmlDocument doc = new XmlDocument();
            doc.LoadXml("<Fruit>" + fruit + "</Fruit>");
            return doc.DocumentElement;
        }

        public static TestDataForSerialization Convert(TestData testdata)
        {
            TestDataForSerialization testdata_toserialize = new TestDataForSerialization();
            List<string> fruits = new List<string>();
            foreach (XmlElement el in testdata.Fruits)
            {
                fruits.Add(el.InnerText);
            }
            testdata_toserialize.Fruits = fruits;

            return testdata_toserialize;
        }

        public static T DeserializeFromStream<T>(MemoryStream ms)
        {
            ms.Seek(0, SeekOrigin.Begin);

            var xs = new XmlSerializer(typeof(T));
            var obj = (T)xs.Deserialize(ms);

            return obj;
        }

        public static T DeserializeFromString<T>(string xml)
        {
            var xs = new XmlSerializer(typeof(TestData));
            var sr = new StringReader(xml);
            var obj = (T)xs.Deserialize(sr);

            return obj;
        }

        public static MemoryStream SerializeToStream<T>(T testdata)
        {
            var ms = new MemoryStream();
            StreamWriter sw = new StreamWriter(ms); // you need to use one of these to get UTF8 output
            var xs = new XmlSerializer(typeof(T));
            xs.Serialize(sw, testdata);

            return ms;
        }
    }
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

유효한 JSON이지만 역 직렬화 할 수 없음

분류에서Dev

HttpResponseMessage를 모델 개체로 역 직렬화 할 수 없음

분류에서Dev

UWP 앱에서 JSON을 역 직렬화 할 수 없음

분류에서Dev

xml 파일을 역 직렬화 할 수 없습니다. 항상 문제가 있습니다.

분류에서Dev

직렬화 후 저지로 json을 역 직렬화 할 수 없습니까?

분류에서Dev

bndtools osgi 프로젝트에서 xml을 역 직렬화 할 수 없습니다.

분류에서Dev

xml을 List <T>로 역 직렬화 할 수 없습니다.

분류에서Dev

문자열로 역 직렬화 할 수 없습니다.

분류에서Dev

JsonUtility로 데이터를 역 직렬화 할 수 없습니다.

분류에서Dev

CouchDB에서 Json을 역 직렬화 할 수 없습니다.

분류에서Dev

JSON에서 사전을 역 직렬화 할 수 없습니다.

분류에서Dev

역 직렬화 후 개체를 캐스팅 할 수 없음

분류에서Dev

시스템 유형을 XML로 직렬화 / 역 직렬화 할 수 있습니까?

분류에서Dev

protobuf-net을 사용하여 C #에서 역 직렬화 할 수 없음

분류에서Dev

C ++ MFC에서 이진 직렬화 된 개체를 C #에서 역 직렬화 할 수 있습니까?

분류에서Dev

역 직렬화 할 수없는 일부 개체를 포함하는 배열 역 직렬화 (역 직렬화 가능 부분 구하기)

분류에서Dev

Dlib에서 학습 된 함수를 직렬화 할 수 없음

분류에서Dev

목록을 포함하는 개체로 XML 문자열을 역 직렬화 할 수 없습니다.

분류에서Dev

어떻게 직렬화 된 일반 목록으로 json 파일을 역 직렬화 할 수 있습니까?

분류에서Dev

시리얼-JSON 문자열을 역 직렬화 할 수 없음-처리되지 않은 예외

분류에서Dev

NoClassDefFoundError로 인해 XStream이 XML을 역 직렬화 할 수 없습니다.

분류에서Dev

예측할 수없는 JSON 속성을 문자열로 역 직렬화

분류에서Dev

XML 문자열을 클래스로 역 직렬화 할 때 새 xml 키를 보존하고 일부 값을 수정 한 다음 다시 직렬화하는 방법

분류에서Dev

네임 스페이스로 인해 XML에서 역 직렬화 할 수 없습니다.

분류에서Dev

FormatException : BsonType 'ObjectId'에서 'Guid'를 역 직렬화 할 수 없습니다.

분류에서Dev

컨트롤러에서 json 개체를 역 직렬화 할 수 없습니다.

분류에서Dev

Java Spring에서 JSONObject (JSONArray 내부)를 역 직렬화 할 수 없습니다.

분류에서Dev

JSON 예외 구문 분석-직렬화 해제 할 수 없음

분류에서Dev

클래스를 직렬화 할 수있을 때 작업을 직렬화 할 수 없음

Related 관련 기사

  1. 1

    유효한 JSON이지만 역 직렬화 할 수 없음

  2. 2

    HttpResponseMessage를 모델 개체로 역 직렬화 할 수 없음

  3. 3

    UWP 앱에서 JSON을 역 직렬화 할 수 없음

  4. 4

    xml 파일을 역 직렬화 할 수 없습니다. 항상 문제가 있습니다.

  5. 5

    직렬화 후 저지로 json을 역 직렬화 할 수 없습니까?

  6. 6

    bndtools osgi 프로젝트에서 xml을 역 직렬화 할 수 없습니다.

  7. 7

    xml을 List <T>로 역 직렬화 할 수 없습니다.

  8. 8

    문자열로 역 직렬화 할 수 없습니다.

  9. 9

    JsonUtility로 데이터를 역 직렬화 할 수 없습니다.

  10. 10

    CouchDB에서 Json을 역 직렬화 할 수 없습니다.

  11. 11

    JSON에서 사전을 역 직렬화 할 수 없습니다.

  12. 12

    역 직렬화 후 개체를 캐스팅 할 수 없음

  13. 13

    시스템 유형을 XML로 직렬화 / 역 직렬화 할 수 있습니까?

  14. 14

    protobuf-net을 사용하여 C #에서 역 직렬화 할 수 없음

  15. 15

    C ++ MFC에서 이진 직렬화 된 개체를 C #에서 역 직렬화 할 수 있습니까?

  16. 16

    역 직렬화 할 수없는 일부 개체를 포함하는 배열 역 직렬화 (역 직렬화 가능 부분 구하기)

  17. 17

    Dlib에서 학습 된 함수를 직렬화 할 수 없음

  18. 18

    목록을 포함하는 개체로 XML 문자열을 역 직렬화 할 수 없습니다.

  19. 19

    어떻게 직렬화 된 일반 목록으로 json 파일을 역 직렬화 할 수 있습니까?

  20. 20

    시리얼-JSON 문자열을 역 직렬화 할 수 없음-처리되지 않은 예외

  21. 21

    NoClassDefFoundError로 인해 XStream이 XML을 역 직렬화 할 수 없습니다.

  22. 22

    예측할 수없는 JSON 속성을 문자열로 역 직렬화

  23. 23

    XML 문자열을 클래스로 역 직렬화 할 때 새 xml 키를 보존하고 일부 값을 수정 한 다음 다시 직렬화하는 방법

  24. 24

    네임 스페이스로 인해 XML에서 역 직렬화 할 수 없습니다.

  25. 25

    FormatException : BsonType 'ObjectId'에서 'Guid'를 역 직렬화 할 수 없습니다.

  26. 26

    컨트롤러에서 json 개체를 역 직렬화 할 수 없습니다.

  27. 27

    Java Spring에서 JSONObject (JSONArray 내부)를 역 직렬화 할 수 없습니다.

  28. 28

    JSON 예외 구문 분석-직렬화 해제 할 수 없음

  29. 29

    클래스를 직렬화 할 수있을 때 작업을 직렬화 할 수 없음

뜨겁다태그

보관