标签: xmlserializer

WCF数据合同/序列化

我创建了一个简单的WCF应用程序,它公开了一个操作 此操作将复合数据类型作为参数.

我没有使用[DataContract]属性修饰此复合数据类型.但这是有效的,我可以在WSDL中看到Schema.

现在我的理解是这个新的自定义类型应该用[Serializable]或[dataContract]属性进行修饰以参与Web服务操作.

我在这里缺少什么?

wcf serialization datacontract xmlserializer

4
推荐指数
2
解决办法
2794
查看次数

为什么XmlSerializer没有序列化我的数组?

我是XmlSerializer的新手.我写了一个小类来保存数据库中的条目:

[Serializable]
public struct Entry
{
    public string artkey, lid, request, status, requestdate;
}
Run Code Online (Sandbox Code Playgroud)

很简单吧?序列化这些列表应该是小菜一碟.

我有一个编译这些列表的函数.要序列化我的列表,我尝试以下代码:

XmlSerializer serializer = new XmlSerializer(typeof(Entry));
System.IO.MemoryStream ms = new System.IO.MemoryStream();
serializer.Serialize(ms, entries.ToArray());
ms.WriteTo(Response.OutputStream);
Run Code Online (Sandbox Code Playgroud)

此代码打印以下异常:

<error>System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidCastException: Specified cast is not valid.
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterEntry.Write3_Entry(Object o)
   --- End of inner exception stack trace ---
   at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
   at System.Xml.Serialization.XmlSerializer.Serialize(Stream stream, Object o, XmlSerializerNamespaces namespaces)
   at System.Xml.Serialization.XmlSerializer.Serialize(Stream stream, Object o) …
Run Code Online (Sandbox Code Playgroud)

.net xml xmlserializer

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

无法以编程方式反序列化SOAP消息

当我尝试反序列化soap消息时,我得到以下异常.我这样做是因为我有我想在测试中重用的响应文件.我不能使用真实的服务或类似的东西,因为它不适合我们的测试框架的架构.

    Test 'MyUnitTestMethod' failed: System.InvalidOperationException : There is an error in XML document (1, 2).
----> System.InvalidOperationException : <MySpecialResponse xmlns='http://xsd.com/msgs/v1'> was not expected. 
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events) 
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle) 
at System.Xml.Serialization.XmlSerializer.Deserialize(Stream stream)


private const string _content =
@"<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"">
  <soapenv:Body>
    <ns3:MySpecialResponse xmlns:ns3=""http://xsd.com/msgs/v1"" >
      <header>
        <status>0</status>
      </header>
      <ns3:Payload>
        <ns3:CustomerName>name</ns3:CustomerName>
        <ns3:EmailAddress>test1@mail.com</ns3:EmailAddress>
      </ns3:Payload>
    </ns3:MySpecialResponse>
  </soapenv:Body>
</soapenv:Envelope>";

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3082")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://xsd.com/msgs/v1")]
public partial class MySpecialResponse : BaseResponse {

    private MySpecialPayload payloadField;

    /// <remarks/> …
Run Code Online (Sandbox Code Playgroud)

c# soap exception .net-3.5 xmlserializer

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

在构造之后将XDeclaration添加到XDocument

我有一个XmlSerializer,我用它来将对象序列化为XDocument.

var doc = new XDocument();
using (var writer = doc.CreateWriter())
{
   xmlSerializer.Serialize(writer, object);
}
Run Code Online (Sandbox Code Playgroud)

完成此操作后,我想添加一个XDeclaration:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
Run Code Online (Sandbox Code Playgroud)

我构建了这个XDeclaration,如下所述:

var decl = new XDeclaration("1.0", "UTF-8", "no");
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将此XDeclartion添加到我的XDocument时,我收到以下错误:

System.ArgumentException : Non white space characters cannot be added to content.
Run Code Online (Sandbox Code Playgroud)

我搜索谷歌已经有一段时间了,但我发现只是将XDeclaration添加到XDocument的构造函数中,在我的情况下(当用XmlWriter填充它时)是不可接受的.

.net c# xml xml-serialization xmlserializer

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

如何自定义Jersey JAXB序列化的XML输出

我在这里有一些@ javax.xml.bind.annotation.Xml ...注释类用于RESt Web服务.Jersey是在一个Spring托管的Web容器中设置的,Web服务正在返回格式良好的xml.我们使用maven-enunciate-plugin来记录Web服务并为返回的xml文档创建xsd.我现在想将文档xsd文件用作返回的xml文件中的schemaLocation,以便xml验证不会抱怨缺少定义.如何为此配置XML序列化?

jaxb jersey xmlserializer

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

XmlSerializer忽略公共字段?

我正在使用一些现有的代码,定义如下.

class Example
{
    public float x_field;
    public float x_property
    {
        get { return x_field; }
        set { x_field = value; }
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么它这样定义我不知道,但我无法改变它的实现.问题是,当我序列化它时,我显然在xml输出中得到了两个值.如果我无法修改'Example'类,怎么能阻止这种情况发生?

我希望Serializer只输出公共属性而不是公共字段.

c# ignore xmlserializer

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

XML序列化程序在对象反序列化时返回null

我在数据库中有一个存储过程,它返回一个XML流,应用程序将该流反序列化为相应的对象.存储过程是这样定义的(我简化了它以使其更具可读性):

SELECT 
    usrs.FirstName AS 'FirstName',
    usrs.LastName AS 'LastName',
    usrs.Username AS 'Username',
    usrs.DateJoined AS 'DateJoined'
FROM USERS AS usrs
WHERE usrs.Username = @username
FOR XML PATH('UserProfile')
Run Code Online (Sandbox Code Playgroud)

请注意,这Username是一个主键,因此存储过程将只返回一个结果.示例查询结果如下所示:

<UserProfile>
  <FirstName>Chuck</FirstName>
  <LastName>Norris</LastName>
  <Username>chuck.awesome</Username>
  <DateJoined>2013-07-22T06:58:00</DateJoined>
</UserProfile>
Run Code Online (Sandbox Code Playgroud)

现在在应用程序中,这是我获取和反序列化数据的方式:

internal static T GetData<T>(StoredProcedures storedProcedure, ParameterList parameters)
    {
        using (var connection = GetSqlConnection())
        {
            using (var command = new SqlCommand(storedProcedure.ToString(), connection))
            {
                command.CommandType = System.Data.CommandType.StoredProcedure;

                foreach (var parameter in parameters)
                {
                    command.Parameters.Add(new SqlParameter(parameter.Key.ToString(), parameter.Value));
                }

                connection.Open();

                var data = command.ExecuteScalar();

                return DeserializeXml<T>(data.ToString());
            }
        }
    } …
Run Code Online (Sandbox Code Playgroud)

c# xml-deserialization xmlserializer

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

使用XmlSerializer忽略.NET中Xml序列化中属性的属性

我正在使用Xml进行血清化XmlSerializer.我正在执行序列化ClassA,其中包含名为MyPropertytype的属性ClassB.我不希望ClassB序列化特定属性.

我必须使用,XmlAttributeOverrides因为这些类在另一个库中.如果财产ClassA本身,它将是直截了当的.

XmlAttributeOverrides xmlOver = new XmlAttributeOverrides();
XmlAttributes xmlAttr = new XmlAttributes();
xmlAttr.XmlIgnore = true;
xmlOver.Add(typeof(ClassA), "MyProperty", xmlAttr);

XmlSerializer ser = new XmlSerializer(typeof(ClassA), xmlOver);
Run Code Online (Sandbox Code Playgroud)

如果属性在ClassB,我们需要序列化如何完成ClassA

.net c# serialization xml-serialization xmlserializer

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

如何在Android中使用后台线程保存文件

我目前创建了一个使用XmlSerializer从对象创建XML文件的函数.我一直在研究使用不同形式的多线程,以便在GUI仍然可用且仍在更新的同时将文件保存在后台.我看过使用AsyncTask来做这件事,但我不确定实现它的最佳方法是什么.请任何人帮助我,并提前感谢你.

这是我到目前为止的代码:

private String fileName;
private DataObjects dataObjects;

public SetCachedValuesFile() 
{

}

public void setFileName(String refFileName)
{
    fileName = refFileName;
}

public void setDataObjects(DataObjects refDataObjects)
{
    dataObjects = refDataObjects;
}

public String getFileName()
{
    return fileName;
}

public DataObjects getDataObjects()
{
    return dataObjects;
}

public void updateValues()
{
    ArrayList<DataObject> arrayListDataObject = dataObjects.getDataObjects();
    try 
    {
        /* Creates a new file and its directory. */
        File directory = new File(Environment.getExternalStorageDirectory() + "/XML_FILES/");
        directory.mkdirs();
        File newFile = new File(directory, fileName + ".xml");
        FileOutputStream …
Run Code Online (Sandbox Code Playgroud)

multithreading android xmlserializer android-asynctask

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

XmlSerializer没有序列化两个枚举属性

我们目前正在尝试使用XmlSerializer.Serialize将一组对象序列化为xml

我们已经使用以下存根测试了XmlSerializer

private static void TestMethod()
{
    ChartContentConfig Config = new ChartContentConfig();
    Config.DefinitionId = "6790e2ca-be93-48dd-94e7-f8ec0f6e5fd4";
    Config.Sorts = null;
    Config.DataFields = new DataField[1];
    Config.DataFields[0] = new DataField()
    {
        Aggregator = AggregateFunction.Sum,
        ApplyFilter = ApplyFilter.Before,
        FieldName = "Hello",
        FieldType = typeof(decimal).ToString(),
        FilterToValue = "",
        FilterFromValue = "",
        FilterOperator = FilterOperator.None,
        IsVisible = false,
        DisplayName = "Hello",
        DefaultStyle = "DefaultFormat"
    };

    Type configType = typeof(DataField);
    DataField DataField = Config.DataFields[0];
    DataField.MarkerFormat = "MarkerFormatTest";
    DataField.SeriesColour = "SeriesColourTest";
    DataField.TestProperty = AggregateFunction.Average;
    DataField.Aggregator = AggregateFunction.Average;
    string test …
Run Code Online (Sandbox Code Playgroud)

c# xml serialization xmlserializer

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