1. 程式人生 > >生成 XML 文件時出錯。使用 XmlInclude 或 SoapInclude 特性靜態指定非已知的型別。

生成 XML 文件時出錯。使用 XmlInclude 或 SoapInclude 特性靜態指定非已知的型別。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Serialization;

namespace ConsoleApp6
{
    class Program
    {
        static void Main(string[] args)
        {
            string r = string.Empty;
            List<Base> list = new List<Base>() {
                new A() { Name = "initName", AName = "aa" },
                new B() { Name = "initName", BName = "bb" }
            };
            try
            {
                r = XmlHelper.SerializeToXml(list);
            }
            catch (Exception ex)
            {
                /* 生成 XML 文件時出錯。 */
                Console.WriteLine(ex.Message);
                /* 不應是型別 ConsoleApp6.A。使用 XmlInclude 或 SoapInclude 特性靜態指定非已知的型別。 */
                Console.WriteLine(ex.InnerException.Message);
            }

            Console.WriteLine(r);
            Console.Read();
        }
    }

    #region [ Test Class ]
    //處理方法:在基類上加上所有需要序列化的子類的 XmlInclude 特性就可以了。
    //下面的程式碼去掉註釋,即可正常執行
    /*
    [XmlInclude(typeof(A))]
    [XmlInclude(typeof(B))]
    */
    public class Base
    {
        public string Name { get; set; }
    }

    public class A : Base
    {
        public string AName { get; set; }
    }

    public class B : Base
    {
        public string BName { get; set; }
    }
    #endregion

    #region [ XMLHelper ]
    public static class XmlHelper
    {
        public static void ObjectWriteToXmlFile<T>(T myObject, string filePath)
        {
            string xmlString = SerializeToXml<T>(myObject);
            File.WriteAllText(filePath, xmlString);
        }

        public static T XmlFileToObject<T>(string filePath)
        {
            string xmlString = File.ReadAllText(filePath);
            return DeserializeToObject<T>(xmlString);
        }

        /// <summary>
        /// 將自定義物件序列化為XML字串
        /// </summary>
        /// <param name="myObject">自定義物件實體</param>
        /// <returns>序列化後的XML字串</returns>
        public static string SerializeToXml<T>(T myObject)
        {
            if (myObject != null)
            {
                XmlSerializer xs = new XmlSerializer(typeof(T));

                MemoryStream stream = new MemoryStream();
                XmlTextWriter writer = new XmlTextWriter(stream, Encoding.UTF8);
                writer.Formatting = Formatting.None;//縮排
                xs.Serialize(writer, myObject);

                stream.Position = 0;
                StringBuilder sb = new StringBuilder();
                using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
                {
                    string line;
                    while ((line = reader.ReadLine()) != null)
                    {
                        sb.Append(line);
                    }
                    reader.Close();
                }
                writer.Close();
                return sb.ToString();
            }
            return string.Empty;
        }

        /// <summary>
        /// 將XML字串反序列化為物件
        /// </summary>
        /// <typeparam name="T">物件型別</typeparam>
        /// <param name="xml">XML字元</param>
        /// <returns></returns>
        public static T DeserializeToObject<T>(string xml)
        {
            T myObject;
            XmlSerializer serializer = new XmlSerializer(typeof(T));
            StringReader reader = new StringReader(xml);
            myObject = (T)serializer.Deserialize(reader);
            reader.Close();
            return myObject;
        }
    }
    #endregion
}

相關推薦

生成 XML 出錯使用 XmlInclude SoapInclude 特性靜態指定型別

using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using

WebService生成XML出錯不應是型別XXXX使用XmlIncludeSoapInclude屬性靜態指定型別

  情況是這樣的有自定義的3個類,House、SaleHouse、RentHouse。SaleHouse和RentHouse是House類的子類。在WebService中有一個方法是返回House類。 1 [WebMethod]2 public House Get(in

WebService生成XML出錯不應是類型XXXX使用XmlIncludeSoapInclude屬性靜態指定的類型

ces 錯誤 ali lse pub col ebs single .get 情況是SingleRoom和DoubleRoom是Room類的子類。在WebService中有一個方法是返回Room類。 public Room Get(int roomId) { re

對訊息 的正文進行序列化出錯:“生成 XML 出錯

c# 執行儲存過程時報錯:對訊息  的正文進行序列化時出錯:“生成 XML 文件時出錯。” 原因是在執行儲存過程時傳遞的裡面包含有表,但是我沒有給表命名。 解決方法是給宣告的表命名: DataTable I_AnnexTable = GetI_AnnexTable();

對訊息 的正文進行序列化出錯:“生成 XML 出錯

c# 執行儲存過程時報錯:對訊息  的正文進行序列化時出錯:“生成 XML 文件時出錯。” 原因是在執行儲存過程時傳遞的裡面包含有表,但是我沒有給表命名。 解決方法是給宣告的表命名: DataTable I_AnnexTable = GetI_AnnexTable()

WebService 在傳回 ArrayList 說: XML 出錯

System.InvalidOperationException: 生成 XML 文件時出錯。 ---> System.InvalidOperationException: CProxyTypeSpace_EntityRoleEntity_NHibernate_Prox

webservice 傳輸Xml的XmlDocument會被直接轉化成XmlNode 想要把它轉回到XmlDocument採用如下變紅的方法

[WebMethod] public XmlDocument GetXmlDocument() { // Create an XmlDocument object. XmlDocument xmlDocumentObject = new XmlDocument(); XmlDocumentObject.Lo

java 生成 xml

new output org enc class 註意 created ear str   解析會了,那接著來學學生成~   同樣的引入依賴: import java.io.File; import java.io.FileOutputStream; import or

使用多個項目生成Xml來顯示幫助

spa 的人 ber this blog -i 項目 對比 方便 終於到這了,我們首先將Product單獨作為一個項目 WebAPI2PostMan.WebModel 並引用他,查看文檔如下。 你會發現,你的註釋也就是屬性的描述沒有了。打開App_Data/XmlDocu

android 中生成xml

android 寫xml文件 在Android中生成xml文件真的很簡單,下面提供2中方法,一種是通過String寫入到文件,另外一種是通過XML 的 XmlSerializer.以後遇到Android寫xml內容就不會困惑了1、通過string寫入文件 String name=mEtName.

Mybatis自動生成Xml,針對字段類型為text等會默認產生XXXXWithBlobs的方法問題

div 生成xml文件 處理 pre cnblogs href 字段 默認 mybatis 默認情況下產生的Mapper.xml裏面存在: 需要修改generatorConfiguration.xml,裏面的table加屬性,如: <t

省廳報7.0 讀取mdb 生成xml

tel long {0} datetime fda string console .get exceptio using System;using System.Collections.Generic;using System.Data;using System.Data.

SQL server 導出平面出錯: The code page on Destination - 3_txt.Inputs[Flat File Destination Input].Columns[UserId] is 936 and is required to be 1252.

log 解決辦法 驗證 AI inpu image ans post BE 我在導出平面文件時:Error 0xc00470d4: Data Flow Task 1: The code page on Destination - 3_txt.Inputs[Flat File

eclipse中如何設置在新建JSP/XML指定編碼UTF-8?

cli Language family ref 發現 encoding 需要 unicode tty eclipse新建jsp文件默認字符編碼為ISO-8859-1,很煩人,每次都需要更改 <%@ page language="java" contentType=

安卓使用StringBuffer和FileOutputStream生成xml

該程式是在安卓中點選生成xml按鈕,在sdcard生成一個名為smsbackup的xml文件 佈局就不多說了,先在存放java的資料夾中新建一個Sms類用來宣告變數 Sms程式碼如下: package com.example.createxmlv1; public class Sm

dom4j生成xml

format doc bsp xml文件 out ted 通過 package orm 1 package xml; 2 3 import java.io.FileWriter; 4 import java.io.IOException; 5 import ja

Dom4j解析和生成XML

一、前言     dom4j是一套非常優秀的java開源api,主要用於讀寫xml文件,具有效能優異、功能強大、和非常方便使用的特點。   另外xml經常用於資料交換的載體,像呼叫webservice傳遞的引數,以及資料做同步操作等等,   所以使用dom4

Xml—dom4j解析以及寫入xml的亂碼問題

book.xml <?xml version="1.0" encoding="UTF-8"?> <書架>   <書>     <書名>Java就業基礎教程</書名>      <作者>張孝祥</作者

Java解析XML生成XML

mysq for 二進制 根據 port des void pub pack XML是eXtensible Markup Language(可擴展標記語言)的簡寫形式,它是一種元標記語言(meta-markup language),也就是說它沒有一套能夠適用於各個領域中所

根據xsd生成xml的c#實現(轉)

using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;us