我理解XMLSerializer如何通过使用反射来确定它应该用于序列化或反序列化XML的公共读/写字段或属性.然而,XMLSerializer要求字段是公共的和读/写.
但是,DataContractSerializer能够读取或写入类中的完全私有字段.所以我想知道如何明确给出DataContractSerializer对我的类的附加访问权限.
我有一个这样的对象,
public class UserObj
{
public string First {get; set;}
public string Last {get; set;}
public addr Address {get; set;}
}
public class addr
{
public street {get; set;}
public town {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我在它上面使用XmlSerializer并且街道和城镇都是空的时,我在XML输出中得到了这个,
<Address />
Run Code Online (Sandbox Code Playgroud)
有没有办法不输出这个空标签?
谢谢
我很难找到一个通用扩展方法,它将给定对象序列化为SOAP格式.实际的实现看起来像这样:
Foobar.cs
[Serializable, XmlRoot("foobar"), DataContract]
public class Foobar
{
[XmlAttribute("foo"), DataMember]
public string Foo { get; set; }
[XmlAttribute("bar"), DataMember]
public string Bar { get; set; }
public Foobar() {}
}
Run Code Online (Sandbox Code Playgroud)
Lipsum.cs
[Serializable, XmlRoot("lipsum"), XmlType("lipsum"), DataContract]
public class Lipsum
{
private List<Foobar> lipsum = new List<Foobar>();
[XmlElement("foobar"), DataMember]
public List<Foobar> Lipsum { get { return lipsum; } }
}
Run Code Online (Sandbox Code Playgroud)
}
Extensions.cs
public static void SerializeToSoap<T>(this Stream target, T source)
{
XmlTypeMapping xmlTypeMapping = (new SoapReflectionImporter().ImportTypeMapping(typeof(T)));
XmlSerializer xmlSerializer = …Run Code Online (Sandbox Code Playgroud) 我有一个excel的加载项目.它在我的电脑上工作正常.但是,当我在客户端计算机上安装它时,它给了我提到的错误消息.
在publish-> prerequisites中,我勾选了这些项目:
.net框架sp1
Microsoft .net框架4
Microsoft Office 2007主互操作程序集
用于办公室运行时的Microsoft visual studio 2010工具
Windows安装程序4.5
我正在使用JSON.这是我班级的代码:
[Serializable]
[JsonObject(MemberSerialization.OptIn)]
public class documentSchemaRestInfo
{
[System.Runtime.Serialization.DataMember]
[JsonProperty]
public double id { get; set; }
[System.Runtime.Serialization.DataMember]
[JsonProperty]
public string name { get; set; }
[System.Runtime.Serialization.DataMember]
[JsonProperty]
public string description { get; set; }
[System.Runtime.Serialization.DataMember]
[JsonProperty]
public string[] fields { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
//*********************
使用该类的代码:
public List<DocumentField> getSchemaOfGroup(documentGroupPk groupPK)
{
List<DocumentField> result = new List<DocumentField>();
HttpWebRequest request = (HttpWebRequest)WebRequest. …Run Code Online (Sandbox Code Playgroud)我有一个属性:
public object Tag
Run Code Online (Sandbox Code Playgroud)
但它可以包含有限数量的类型,遗憾的是没有基类型(对象类型除外).但是,当我使用此属性序列化对象时,它不会被序列化.有没有办法用可能的类型指示XmlSerializer?
我试图用XmlSerializer做一个非常简单的序列化:
public struct XmlPerson
{
[XmlAttribute] public string Id { get; set; }
[XmlAttribute] public string Name { get; set; }
}
public class GroupOfPeople
{
private Dictionary<string, string> _namesById = new Dictionary<string, string>();
//pseudo property for serialising dictionary to/from XML
public List<XmlPerson> _XmlPeople
{
get
{
var people = new List<XmlPerson>();
foreach (KeyValuePair<string, string> pair in _namesById )
people.Add(new XmlPerson() { Id = pair.Key, Name = pair.Value });
return people;
}
set
{
_namesById.Clear();
foreach (var person in value) …Run Code Online (Sandbox Code Playgroud) 我正在使用asp.net MVC4 Web Api.
我已经设定:
Dim xml = GlobalConfiguration.Configuration.Formatters.XmlFormatter
xml.UseXmlSerializer = True
Run Code Online (Sandbox Code Playgroud)
我创建了一个类,它指定了我需要的XML,这很有效.
我几乎在那里,但我不确定如何设置:
<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)
以及如何设置元素属性:
xmlns:xsi和xsi:schemaLocation
我可以使用属性设置吗?
我正在尝试反序列化以下XML:
<?xml version="1.0" encoding="utf-8" ?>
<mf:somedata xmlns:mf="urn:somedata">
<CurrentAccount>
<AccountType>test</AccountType>
<Charge>
<ChargeType>test</ChargeType>
</Charge>
</CurrentAccount>
<CurrentAccount>
<AccountType>test 2</AccountType>
<Charge>
<ChargeType>test 2</ChargeType>
</Charge>
</CurrentAccount>
</mf:somedata>
Run Code Online (Sandbox Code Playgroud)
使用以下类:
[XmlRoot("somedata", Namespace = "urn:somedata")]
public class MfCurrentAccounts
{
[XmlElement("CurrentAccount")]
public CurrentAccount[] CurrentAccounts { get; set; }
}
public class CurrentAccount
{
public string AccountType { get; set; }
[XmlElement("Charge")]
public Charge[] Charges { get; set; }
}
public class Charge
{
public string ChargeType { get; set; }
}
var c = new XmlSerializer(typeof(MfCurrentAccounts)).Deserialize(new StringReader(xml)) as MfCurrentAccounts; …Run Code Online (Sandbox Code Playgroud) 我正在使用C#/ .NET反序列化类似于此的XML文件:
<?xml version="1.0" encoding="utf-8" ?>
<Books>
<Book
Title="Animal Farm"
>
<Thing1>""</Thing1>
<Thing2>""</Thing2>
<Thing3>""</Thing3>
...
<ThingN>""</ThingN>
</Book>
... More Book nodes ...
</Books>
Run Code Online (Sandbox Code Playgroud)
对于反序列化的XML,我的类看起来像:
[XmlRoot("Books")]
public class BookList
{
// Other code removed for compactness.
[XmlElement("Book")]
public List<Book> Books { get; set; }
}
public class Book
{
// Other code removed for compactness.
[XmlAttribute("Title")]
public string Title { get; set; }
[XmlAnyElement()]
public List<XmlElement> ThingElements { get; set; }
public List<Thing> Things { get; set; }
}
public class …Run Code Online (Sandbox Code Playgroud) 是否可以通过任何配置选项告诉 JavaScriptXMLSerializer不要将空标签折叠为自闭合标签?我将一个 xml 字符串输入到 xml 解析器中,然后在对树进行修改后重新序列化它,但是在输入中有一个显式结束标记的地方,它在输出中折叠为一个自结束标记,这会导致问题。
javascript xmlhttprequest xmlserializer internet-explorer-11
xmlserializer ×10
c# ×6
.net ×5
xml ×3
.net-4.0 ×1
collections ×1
javascript ×1
json ×1
publish ×1
setter ×1
soap ×1
vsto ×1
xml-encoding ×1