我使用C#+ VSTS2008 + .Net 3.0来进行XML序列化.代码工作正常.下面是我的代码和当前序列化的XML结果.
现在我想在输出XML文件中添加两个附加层.这是我期望的XML结果.有什么简单的方法吗?我不确定NestingLevel是否可以帮助这样做.我想找到一种不会改变MyClass和MyObject结构的简单方法.
预期的XML序列化结果,
<?xml version="1.0"?>
<MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MyObjectProperty>
<AdditionalLayer1>
<AdditionalLayer2>
<ObjectName>Foo</ObjectName>
</AdditionalLayer1>
</AdditionalLayer2>
</MyObjectProperty>
</MyClass>
Run Code Online (Sandbox Code Playgroud)
当前的XML序列化结果,
<?xml version="1.0"?>
<MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MyObjectProperty>
<ObjectName>Foo</ObjectName>
</MyObjectProperty>
</MyClass>
Run Code Online (Sandbox Code Playgroud)
我目前的代码,
public class MyClass
{
public MyObject MyObjectProperty;
}
public class MyObject
{
public string ObjectName;
}
public class Program
{
static void Main(string[] args)
{
XmlSerializer s = new XmlSerializer(typeof(MyClass));
FileStream fs = new FileStream("foo.xml", FileMode.Create);
MyClass instance = new MyClass();
instance.MyObjectProperty = new MyObject();
instance.MyObjectProperty.ObjectName = "Foo";
s.Serialize(fs, …Run Code Online (Sandbox Code Playgroud) 如何在xml中编码特殊字符?例如:我的xml中有一个特殊字符mu,由于这个字符,转换将失败,任何信息都会有所帮助
谢谢Preetham
这是我的班级:
[Serializable()]
[XmlRootAttribute("Language")]
public class Language : ISerializable
{
string Id {
get;
set;
}
string Part2B {
get;
set;
}
string Part2T {
get;
set;
}
string Part1 {
get;
set;
}
string Scope {
get;
set;
}
string LanguageType {
get;
set;
}
string RefName {
get;
set;
}
string Comment {
get;
set;
}
Run Code Online (Sandbox Code Playgroud)
剪断
我从Mono Web服务返回它们的数组,如下所示:
[WebMethod()]
[ScriptMethod(ResponseFormat=ResponseFormat.Json)]
public Language[] GetLanguages()
{
List<Language> languages;
languages = GetLanguageList();
return languages.ToArray();
}
Run Code Online (Sandbox Code Playgroud)
但我得到的是:
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfLanguage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" …Run Code Online (Sandbox Code Playgroud) 我有一个元素数组,我需要使用XmlSerializer序列化.我遇到的问题是我有2个派生类,并序列化它们,因此它们有一个共同基础的元素名称,似乎不起作用.
所以,这就是XML的外观:
<Root>
<Base> foo </Base>
</Root>
Run Code Online (Sandbox Code Playgroud)
相反,我得到了
<Root>
<Derived1> foo </Derived1>
</Root>
Run Code Online (Sandbox Code Playgroud)
我序列化的元素数组的代码是
private object[] m_nodes;
[System.Xml.Serialization.XmlElementAttribute("Base", typeof(Derived1)]
[System.Xml.Serialization.XmlElementAttribute("Base", typeof(Derived2)]
public object[] Nodes
{
get
{
return this.m_nodes;
}
set
{
this.m_nodes = value;
}
}
Run Code Online (Sandbox Code Playgroud)
使用上面的代码,我发现节点有一个反射错误.如果我将XmlEelementAttributes中的"Base"更改为"Derived1"和Derived2",它可以工作,但元素名称不正确.
[System.Xml.Serialization.XmlInclude(typeof(Derived1))]
public abstract class Base
{
public Base()
{
}
}
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public class Derived1: Base
{
public Derived1()
{
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助是极大的赞赏.非常感谢.
我尝试使用Delphi 2010自定义属性调查DeHL,但出现问题。
TAppParamTest = class
public
User: string;
Password: string;
end;
TAppParam = class
private
FTest: TAppParamTest;
public
constructor Create;
destructor Destroy; override;
property Test: TAppParamTest read FTest write FTest;
end;
Run Code Online (Sandbox Code Playgroud)
这很好用:当我序列化时我有这个
<TAppParam xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:DeHL="http://alex.ciobanu.org/DeHL.Serialization.XML" DeHL:class="AppParam_unt.TAppParam" DeHL:refid="1">
<FTest DeHL:class="AppParam_unt.TAppParamTest" DeHL:refid="2">
<User>User</User>
<Password>Psw</Password>
</FTest>
</TAppParam
Run Code Online (Sandbox Code Playgroud)
但我想要这个:
<TAppParam xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:DeHL="http://alex.ciobanu.org/DeHL.Serialization.XML" DeHL:class="AppParam_unt.TAppParam" DeHL:refid="1">
<Test DeHL:class="AppParam_unt.TAppParamTest" DeHL:refid="2">
<User>User</User>
<Password>Psw</Password>
</Test>
</TAppParam
Run Code Online (Sandbox Code Playgroud)
所以我想在类中添加自定义属性:
TAppParam = class
private
[XmlElement('Test')]
FTest: TAppParamTest;
public
constructor Create;
destructor Destroy; override;
property Test: TAppParamTest read FTest …Run Code Online (Sandbox Code Playgroud) 目前我编写了一个反序列化XML的函数,如下所示.如何更改它,以便每次我想要序列化另一个对象类型时都不必替换类型?当前对象类型是cToolConfig.如何使此功能通用?
Public Shared Function DeserializeFromXML(ByRef strFileNameAndPath As String) As XMLhandler.XMLserialization.cToolConfig
Dim deserializer As New System.Xml.Serialization.XmlSerializer(GetType(cToolConfig))
Dim srEncodingReader As IO.StreamReader = New IO.StreamReader(strFileNameAndPath, System.Text.Encoding.UTF8)
Dim ThisFacility As cToolConfig
ThisFacility = DirectCast(deserializer.Deserialize(srEncodingReader), cToolConfig)
srEncodingReader.Close()
srEncodingReader.Dispose()
Return ThisFacility
End Function
Public Shared Function DeserializeFromXML1(ByRef strFileNameAndPath As String) As System.Collections.Generic.List(Of XMLhandler.XMLserialization.cToolConfig)
Dim deserializer As New System.Xml.Serialization.XmlSerializer(GetType(System.Collections.Generic.List(Of cToolConfig)))
Dim srEncodingReader As IO.StreamReader = New IO.StreamReader(strFileNameAndPath, System.Text.Encoding.UTF8)
Dim FacilityList As System.Collections.Generic.List(Of cToolConfig)
FacilityList = DirectCast(deserializer.Deserialize(srEncodingReader), System.Collections.Generic.List(Of cToolConfig))
srEncodingReader.Close()
srEncodingReader.Dispose()
Return FacilityList
End Function
Run Code Online (Sandbox Code Playgroud) 我正在尝试将POCO视图数据类xml序列化为xml.它序列化,但错误地生成一些xml.
例如.(目前的结果......不是我追求的那个)
<ReviewListViewData>
<reviews>
<review>....</review>
...
</reviews>
</ReviewListViewData>
Run Code Online (Sandbox Code Playgroud)
我想要(注意我是如何删除坏根节点的?)...
<reviews>
<review>....</review>
...
</reviews>
Run Code Online (Sandbox Code Playgroud)
类被定义为......
public class ReviewListViewData
{
[XmlArray("reviews")]
[XmlArrayItem("review")]
public ReviewViewData[] Reviews { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是一个在ASP.NET MVC ActionMethod中调用的示例方式: -
var reviewListViewData = GetReviewListViewData(...);
return XmlResult(reviewListViewData); // (XmlResult referenced from MVCContrib).
Run Code Online (Sandbox Code Playgroud)
有人有什么想法吗?
我正在使用DataContractSerializer类序列化DateTime对象.我得到以下输出.
2013-05-21T10:50:23.5602265-04:00
Run Code Online (Sandbox Code Playgroud)
什么是最终组件?
YYYY-MM-DDTHH:MM:SS.zzzzzzz-??:??
Run Code Online (Sandbox Code Playgroud)
谢谢
我有以下包含静态成员变量的对象.
我想要做的是序列化这个对象并将其保存到XML.不幸的是,下面的代码似乎没有完成这项工作.
我很感激能帮到你.
[Serializable]
public class Numbers
{
public int no;
public static int no1;
public SubNumbers SubNumber;
}
[Serializable]
public class SubNumbers
{
public int no;
public static int no2;
}
[TestMethod]
public void Serialize_Object_with_Static_Property_test()
{
Numbers a = new Numbers();
a.no = 12;
Numbers.no1 = 345243;
SubNumbers s = new SubNumbers();
s.no = 459542;
SubNumbers.no2 = 9999999;
a.SubNumber = s;
String filename = @"a1.txt";
FileStream fs = new FileStream(filename, FileMode.Open);
XmlSerializer x = new XmlSerializer(typeof(Numbers));
x.Serialize(fs, a);
fs.Close(); …Run Code Online (Sandbox Code Playgroud) WCF中"IsWrapped"属性的用途是什么.我应该在哪种情况下使用这个属性?为什么?