我想转换像这样的xml元素:
<asin>?B0013FRNKG?</asin>?
Run Code Online (Sandbox Code Playgroud)
在javascript中输入字符串
我用过XMLSerializer:
new XMLSerializer().serializeToString(xml);
Run Code Online (Sandbox Code Playgroud)
字符串仅显示在alert()和控制台中.在页面上它只是说
[object Element][object Element]
Run Code Online (Sandbox Code Playgroud)
我想得到这个字符串.
我有一个XML,我想加载到对象,操纵这些对象(设置值,读取值),然后保存这些XML.对我来说,在我创建的结构(xsd)中使用XML非常重要.
一种方法是编写我自己的序列化程序,但它是否内置支持它或C#中的开源我可以使用?
我有一个我使用序列化/反序列化的类XmlSerializer.该类包含一个DateTime字段.
序列化时,该DateTime字段由包含GMT偏移的字符串表示,例如2010-05-05T09:13:45-05:00.反序列化时,这些时间将转换为执行反序列化的机器的本地时间.
由于不值得解释的原因,我想阻止这种时区转换的发生.序列化发生在野外,其中存在此类的多个版本.反序列化发生在我控制的服务器上.因此,似乎在反序列化期间最好处理这个问题.
除了IXmlSerializable"手动" 执行和执行所有反序列化之外,我怎样才能实现这一点?
我正在建立一个与第三方接口的库.通过XML和HTTP帖子进行通信.那很有效.
但是,无论代码使用哪个库都不需要知道内部类.我使用此方法将内部对象序列化为XML:
internal static string SerializeXML(Object obj)
{
XmlSerializer serializer = new XmlSerializer(obj.GetType(), "some.domain");
//settings
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.OmitXmlDeclaration = true;
using (StringWriter stream = new StringWriter())
{
using (XmlWriter writer = XmlWriter.Create(stream, settings))
{
serializer.Serialize(writer, obj);
}
return stream.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我将类的访问修饰符更改为时internal,我在运行时得到一个异常:
[System.InvalidOperationException] = {"MyNamespace.MyClass由于其保护级别而无法访问.只能处理公共类型."}
该异常发生在上面代码的第一行.
我希望我的图书馆的课程不公开,因为我不想公开它们.我能这样做吗?如何使用我的通用序列化程序使内部类型可序列化?我究竟做错了什么?
这是我试图解决的问题的一个虚构的例子.如果我在C#中工作,并且像这样使用XML:
<?xml version="1.0" encoding="utf-8"?>
<Cars>
<Car>
<StockNumber>1020</StockNumber>
<Make>Nissan</Make>
<Model>Sentra</Model>
</Car>
<Car>
<StockNumber>1010</StockNumber>
<Make>Toyota</Make>
<Model>Corolla</Model>
</Car>
<SalesPerson>
<Company>Acme Sales</Company>
<Position>
<Salary>
<Amount>1000</Amount>
<Unit>Dollars</Unit>
... and on... and on....
</SalesPerson>
</Cars>
Run Code Online (Sandbox Code Playgroud)
SalesPerson中的XML可能非常长,大小为兆字节.我想反序列化标记,但不反序列化SalesPerson XML元素,而是保持原始形式"以后".
基本上我希望能够将其用作XML的Objects表示.
[System.Xml.Serialization.XmlRootAttribute("Cars", Namespace = "", IsNullable = false)]
public class Cars
{
[XmlArrayItem(typeof(Car))]
public Car[] Car { get; set; }
public Stream SalesPerson { get; set; }
}
public class Car
{
[System.Xml.Serialization.XmlElementAttribute("StockNumber")]
public string StockNumber{ get; set; }
[System.Xml.Serialization.XmlElementAttribute("Make")]
public string Make{ get; set; }
[System.Xml.Serialization.XmlElementAttribute("Model")] …Run Code Online (Sandbox Code Playgroud) 我有一个简单的枚举:
enum simple
{
one,
two,
three
};
Run Code Online (Sandbox Code Playgroud)
我也有一个具有类型属性的类simple.我尝试用属性装饰它:[XmlAttribute(DataType = "int")].但是,当我尝试使用一个序列化它时失败XmlWriter.
这样做的正确方法是什么?我是否必须标记枚举本身以及属性,如果是,请使用哪种数据类型?
我正在序列化对象列表 List<TestObject>
,XmlSerializer生成<ArrayOfTestObject>属性,我想重命名或删除它.
可以通过创建将List封装为字段的新类来完成吗?
[XmlRoot("Container")]
public class TestObject
{
public TestObject() { }
public string Str { get; set; }
}
List<TestObject> tmpList = new List<TestObject>();
TestObject TestObj = new TestObject();
TestObj.Str = "Test";
TestObject TestObj2 = new TestObject();
TestObj2.Str = "xcvxc";
tmpList.Add(TestObj);
tmpList.Add(TestObj2);
XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
settings.Indent = true;
XmlSerializer serializer = new XmlSerializer(typeof(List<TestObject>));
using (XmlWriter writer = XmlWriter.Create(@"C:\test.xml", settings))
{
XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
namespaces.Add(string.Empty, string.Empty);
serializer.Serialize(writer, tmpList, namespaces);
} …Run Code Online (Sandbox Code Playgroud) 我有4个小类来从xm轮询中反序列化xml,到可用的类来构建轮询.
现在,我知道如何从类中设置属性,以匹配xml中的某个属性或元素,如果该元素只是一个简单的字符串,但如果该元素也具有如下例所示的属性,该怎么办?
<Questions>
<Question id="a guid">
<AnswerItems>
<AnswerItem Id="a guid">3</AnswerItem>
<AnswerItem Id="a guid">2</AnswerItem>
<AnswerItem Id="a guid">5</AnswerItem>
</AnswerItems>
</Question>
</Questions>
Run Code Online (Sandbox Code Playgroud)
问题类看起来像这样:
[Serializable()]
public class Question
{
[XmlAttribute("Id")]
public Guid QuestionId { get; set; }
[XmlArray("AnswerItems")]
[XmlArrayItem("AnswerItem", typeof(AnswerItem))]
public AnswerItem[] AnswerItems { get; set; }
}
[Serializable()]
public class AnswerItem
{
[XmlAttribute("Id")]
public Guid QuestionId { get; set; }
// how do i fetch the value of this node?
// its not a XmlElement and it's not an XmlValue
}
Run Code Online (Sandbox Code Playgroud)
好的,所以AnswerItem节点的值,这也是我想要得到的.我可以很容易地不使用AnswerItem类,只使用String类型的XmlArray AnswerItems并将值放在数组中,但之后我将丢失AnswerItem的Id属性.
我有以下XML:
<person xmlns:a="http://example.com" xmlns:b="http://sample.net">
<a:fName>John</a:fName>
<a:lName>Wayne</a:lName>
<b:age>37</b:age>
</person>
Run Code Online (Sandbox Code Playgroud)
如何在类上定义XML序列化属性以支持所描述的场景?
我想知道在处理通过网络传输对象时我们应该选择什么序列化机制.优缺点都有什么 ?
我知道大多数的我们在使用的时候JSON还是XML用于AJAX自传输格式相当多Javascript格式,再加上JSON是相当轻巧的,其占用空间小,因此是Java系列化完全出表的?
java serialization json xml-serialization data-serialization