我刚刚开始玩REST入门套件,而且我试图建立自己的服务.我正在尝试创建一个帐户管理服务,我无法获得序列化我的对象的服务,抛出以下错误:
无法使用根名称'CreateAccount'和根命名空间''(对于操作'CreateAccount'和契约('Service',' http://tempuri.org/ '))使用DataContractSerializer 反序列化XML主体.确保将与XML对应的类型添加到服务的已知类型集合中.
这是服务的实际代码(基于项目附带的'DoWork'方法):
[WebHelp(Comment = "Creates a Membership account")]
[WebInvoke(UriTemplate = "CreateAccount", RequestFormat = WebMessageFormat.Xml)]
[OperationContract]
public ServiceResponse CreateAccount(CreateAccount request)
{
try
{
// do stuff
return new ServiceResponse()
{
Status = "SUCCESS",
ErrorMessage = ""
};
}
catch (Exception ex)
{
return new ServiceResponse()
{
Status = "ERROR",
ErrorMessage = ex.Message + "\n\n" + ex.StackTrace
};
}
}
Run Code Online (Sandbox Code Playgroud)
最后,但并非最不重要的是,这是导致所有麻烦的对象:
public class CreateAccount
{
public string FirstName { get; set; }
public string LastName { get; set; …Run Code Online (Sandbox Code Playgroud) 我正在使用的文件格式(OFX)类似于XML,并且在类似XML的位开始之前包含一堆纯文本内容.它不喜欢在纯文本和XML部分之间,所以我想知道是否有办法让XmlSerialiser忽略它.我知道我可以浏览文件并删除该行,但是首先不写它会更简单,更清洁!有任何想法吗?
我遇到了一个传统的XSD,有很多像......
<xs:element minOccurs="1"
maxOccurs="1"
default="true"
name="Ready" type="xs:boolean" />
Run Code Online (Sandbox Code Playgroud)
...其中minOccurs和maxOccurrs都等于1,并且有一个默认值.这里有默认属性是否有任何好处,因为XML doc需要以任何方式包含某些值?
所有,我正在尝试序列化和反序列化类,并且反序列化失败.有大量类似的线程,但我无法解决这个问题.我收到以下错误"XML文档中存在错误(2,2)"内部期望"{"未被预期."}"
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
namespace XMLSerialization
{
[System.Xml.Serialization.XmlRootAttribute(Namespace = "",
IsNullable = false)]
public class Level
{
private String _name;
private String _background;
public Level()
{
_name = "LEVEL_NAME";
_background = "LEVEL_BACKGROUND_IMAGE";
}
[XmlAttribute("LevelName")]
public String LevelName
{
get { return _name; }
set { _name = value; }
}
[XmlAttribute("Background")]
public String Background
{
get { return _background; }
set { _background = value; }
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我用于反序列化的代码.序列化正在发生,但反序列化没有经历.我认为我犯了一个小错误,但我无法解决这个问题!
using System;
using …Run Code Online (Sandbox Code Playgroud) 我有这个方法来序列化任何类型的对象
public static string SerializeObject<T>(this T toSerialize)
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
StringWriter textWriter = new StringWriter();
xmlSerializer.Serialize(textWriter, toSerialize);
return textWriter.ToString();
}
Run Code Online (Sandbox Code Playgroud)
现在我需要一些方法来将字符串反序列化为对象类型,我可以依赖于某些代码.
我的问题是如何实施这种方法?
感谢你们!
private string DeSerialize(string studata)
{
dcs= new DataContractSerializer(typeof(string));
try
{
using (var q = new StringReader(studata))
{
using (XmlReader reader = XmlReader.Create(sr))
{
var k = dcs.ReadObject(reader);
return k.ToString();
}
}
}
catch
{}
return string.Empty;
}
Run Code Online (Sandbox Code Playgroud)
用上述方法得到了在第1行位置41.运行时错误"错误从命名空间'http://schemas.microsoft.com/2003/10/Serialization/’..遇到'元素’学生名字空间期待元件'字符串’
我是VS 2012 silverlight-5初学者.我试图从xml文件序列化和反序列化.这样做时我有以下错误:
The type or namespace name 'Serializable' does not exist in the namespace 'System' (are you missing an assembly reference?)
The type or namespace name 'SerializableAttribute' could not be found (are you missing a using directive or an assembly reference?)
The type or namespace name 'DatamemberAttribute' could not be found (are you missing a using directive or an assembly reference?)
The type or namespace name 'Datamember' could not be found (are you missing a using directive or an …Run Code Online (Sandbox Code Playgroud) 我试图通过WebApi方法将XML反序列化为对象。
我有以下课程:
[XmlRoot(IsNullable = false)]
public class MyObject
{
[XmlElement("Name")]
public string Name {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
以及WebApi控制器中的以下方法。
[HttpPost]
public HttpResponseMessage UpdateMyObject(MyObject model)
{
//do something with the model
}
Run Code Online (Sandbox Code Playgroud)
我XmlSerializer通过在Web项目的启动中设置以下内容来使用:
config.Formatters.XmlFormatter.UseXmlSerializer = true;
Run Code Online (Sandbox Code Playgroud)
当我发布以下XML时,model会正确反序列化,并且我可以读取其属性。
<?xml version="1.0" encoding="UTF-8"?>
<MyObject>
<Name>HelloWorld</Name>
</MyObject>
Run Code Online (Sandbox Code Playgroud)
但是,当我使用DOCTYPE声明发布XML时,该model值为null,并且似乎在方法输入时未反序列化。也就是说,此XML不会反序列化为模型:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE MyObject SYSTEM "http://example.com/MyObject.dtd">
<MyObject>
<Name>HelloWorld</Name>
</MyObject>
Run Code Online (Sandbox Code Playgroud)
希望有人能够提供帮助。
查看有关XML序列化的Microsoft文章:
https://msdn.microsoft.com/zh-CN/library/58a18dwa.aspx
它们在“序列化对象数组”下给出了一个示例,如下所示:
public class PurchaseOrder
{
public Item [] ItemsOrders
}
public class Item
{
public string ItemID
public decimal ItemPrice
}
Run Code Online (Sandbox Code Playgroud)
输出:
<PurchaseOrder>
<Items>
<Item>
<ItemID>aaa111</ItemID>
<ItemPrice>34.22</ItemPrice>
</Item>
<Item>
<ItemID>bbb222</ItemID>
<ItemPrice>2.89</ItemPrice>
</Item>
</Items>
</PurchaseOrder>
Run Code Online (Sandbox Code Playgroud)
困扰我的是“商品”标签。在我看来,仅“ Item”标签应该是“ PurchaseOrder”的子级。“项目”标签似乎不必要且令人困惑。我可能是错的。
有没有办法让这个例子像这样序列化:
<PurchaseOrder>
<Item>
<ItemID>aaa111</ItemID>
<ItemPrice>34.22</ItemPrice>
</Item>
<Item>
<ItemID>bbb222</ItemID>
<ItemPrice>2.89</ItemPrice>
</Item>
</PurchaseOrder>
Run Code Online (Sandbox Code Playgroud) 我想为泛型类创建一个xml.其中一个属性具有泛型类型.对于此属性,我不希望将属性名称用作其XML元素名称,而是使用泛型类型的名称.
这个类看起来像这样:
[XmlRoot("Entity")]
public class StoreItem<TEntity>
where TEntity : class, new()
{
/// <summary>
/// Gets and sets the status of the entity when storing.
/// </summary>
[XmlAttribute]
public System.Data.Services.Client.EntityStates Status { get; set; }
/// <summary>
/// Gets and sets the entity to be stored.
/// </summary>
public TEntity Entity { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在序列化某种商店项目时StoreItem<SewageArea>,XML应包含以下内容:
<Entity Status="Deleted">
<SewageArea ...>
...
</SewageArea>
<Entity>
Run Code Online (Sandbox Code Playgroud)
要求是,SewageArea上面的例子应该以"正常"方式序列化.另一个重要的事情是,如果可能的话,代码应该准备好在类中自动序列化新添加的属性StoreItem.