标签: xml-serialization

无法在WCF REST服务中反序列化XML

我刚刚开始玩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)

c# xml rest wcf xml-serialization

1
推荐指数
1
解决办法
1万
查看次数

如何使XmlSerialiser不以<?xml?>开头?

我正在使用的文件格式(OFX)类似于XML,并且在类似XML的位开始之前包含一堆纯文本内容.它不喜欢在纯文本和XML部分之间,所以我想知道是否有办法让XmlSerialiser忽略它.我知道我可以浏览文件并删除该行,但是首先不写它会更简单,更清洁!有任何想法吗?

c# xml xml-serialization ofx

1
推荐指数
1
解决办法
244
查看次数

当minOccurs attribrute> 1时,使用默认属性的任何好处?

我遇到了一个传统的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需要以任何方式包含某些值?

c# xml xsd xml-serialization

1
推荐指数
1
解决办法
493
查看次数

XML序列化时出现C#错误"XML文档中存在错误(2,2)"

所有,我正在尝试序列化和反序列化类,并且反序列化失败.有大量类似的线程,但我无法解决这个问题.我收到以下错误"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)

c# xml-serialization

1
推荐指数
1
解决办法
7976
查看次数

C#中的Genereic反序列化方法

我有这个方法来序列化任何类型的对象

    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)

现在我需要一些方法来将字符串反序列化为对象类型,我可以依赖于某些代码.

我的问题是如何实施这种方法?

感谢你们!

c# serialization xml-serialization deserialization

1
推荐指数
1
解决办法
128
查看次数

使用带有C#的DataContactSerializer进行反序列化时出错

      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/’..遇到'元素’学生名字空间期待元件'字符串’

.net c# xml-serialization datacontractserializer

1
推荐指数
1
解决办法
2078
查看次数

类型或命名空间名称'Serializable'在名称空间'System'中不存在(您是否缺少程序集引用?

在此输入图像描述我是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)

c# xml serialization xml-serialization

1
推荐指数
1
解决办法
1万
查看次数

允许.NET WebApi忽略DOCTYPE声明

我试图通过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)

希望有人能够提供帮助。

c# xml xml-serialization asp.net-web-api asp.net-web-api2

1
推荐指数
1
解决办法
714
查看次数

对象的XML序列化列表

查看有关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)

c# xml serialization xml-serialization

1
推荐指数
1
解决办法
4885
查看次数

C#:从泛型类型名称获取XML元素名称的最佳方法

我想为泛型类创建一个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.

c# xml generics xml-serialization

1
推荐指数
1
解决办法
1435
查看次数