标签: xml-deserialization

带有Name属性的C#XML字符串元素

我正在尝试使用字符串属性创建用于序列化/反序列化的ac#对象.该属性需要生成一个元素,并且还具有一个属性:

例如:

...
<Comment Name="CommentName"></Comment>
...
Run Code Online (Sandbox Code Playgroud)

如果属性是字符串,我无法看到如何添加属性,如果注释是具有Name和Value属性的对象,则会生成:

...
<Comment Name="CommentName">
    <Value>comment value</Value>
</Comment>
...
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

c# xml-serialization xml-deserialization

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

NET中如何使用multiref反序列化肥皂响应?

我正在为Java ws制作.net wcf客户端。但是当我发出一个请求,并且响应包含错误时,它也包含multiRef部分。所以我得到这个异常:

服务器返回了无效的SOAP错误。来自名称空间“ http://schemas.xmlsoap.org/soap/envelope的结束元素” Body” 。从名称空间中找到元素'multiRef'''

这是服务器响应的样子(直接从网络获取):

<soapenv:Envelope>
  <soapenv:Header/>
  <soapenv:Body>
    <soapenv:Fault>...</soapenv:Fault>

    <multiRef>...</multiRef>

   </soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)

有什么方法可以配置我的wcf客户端以反序列化该消息吗?还是有可能获取原始响应xml?

soapfault xml-deserialization

5
推荐指数
0
解决办法
1038
查看次数

如何避免异常反序列化无效的枚举项?

为简单起见,我将使用水果显示我的示例代码.实际上我正在做一些更有意义的事情(我们希望).假设我们有一个枚举:

public enum FruitType
{
    Apple,
    Orange,
    Banana
}
Run Code Online (Sandbox Code Playgroud)

一节课:

[Serializable]
public class Fruit
{
    public FruitType FruitType { get; set; }
    public Fruit(FruitType type)
    {
        this.FruitType = type;
    }
}
Run Code Online (Sandbox Code Playgroud)

我们可以对它进行序列化和反序列化.现在,让我们修改枚举,现在它是:

public enum FruitType
{
    GreenApple,
    RedApple,
    Orange,
    Banana
}
Run Code Online (Sandbox Code Playgroud)

反序列化以前序列化的对象时,会出现System.InvalidOperation异常,因为Apple(原始枚举项)无效.该对象不会被反序列化.

我能够解决这个问题的一种方法是在序列化时为类中的FruitType属性赋予Fruit不同的名称,如下所示:

    [XmlElement(ElementName = "Mode")]
    public FruitType FruitType { get; set; }
Run Code Online (Sandbox Code Playgroud)

现在,在反序列化期间,旧属性将被忽略,因为找不到它.我想知道是否有一种方法可以在反序列化期间忽略/跳过无效的枚举项,这样就不会抛出异常并且对象仍然会被反序列化.

c# serialization xml-serialization xml-deserialization deserialization

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

如何将SoapObject转换或反序列化为我的对象?

我有一个.Net Webservice,它返回一个简单的序列化对象.

我有以下代码来获取我的.Net webservice的响应.如何将返回的XML反序列化为我的对象?

我想返回MyObject而不是SoapPrimitive.

private static SoapPrimitive callWebServiceMethod(String url,
            String namespace, String methodName,
            HashMap<String, Object> parameters, String soapAction)
            throws Exception {

        Log.i("WebService", "URL: " + url);
        Log.i("WebService", "MethodName: " + methodName);

        URL myurl = new URL(url);
        URLConnection connection = myurl.openConnection();
        connection.setConnectTimeout(20 * 1000);
        HttpURLConnection httpConnection = (HttpURLConnection) connection;
        int responseCode = httpConnection.getResponseCode();
        if (responseCode == HttpURLConnection.HTTP_OK)
        {
            httpConnection.disconnect();
            SoapObject request = new SoapObject(namespace, methodName);

            if (parameters != null) {
                String[] keys = new String[0];
                keys = (String[]) parameters.keySet().toArray(keys);
                Object[] …
Run Code Online (Sandbox Code Playgroud)

android casting ksoap2 xml-deserialization

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

使用Symfony2将xml反序列化为对象

我通过API收集xml格式的一些数据,并希望在对象列表中反序列化它.我正在使用Symfony2并找出JMSSerializerBundle,但我真的不知道如何使用它.

我知道Sf2允许将对象序列化/反序列化到数组,但我正在寻找更具体的东西.例如,对于这个类:

class Screenshot
{
    /**
     * @var integer $id
     */
    private $id;

    /**
     * @var string $url_screenshot
     */
    private $url_screenshot;


    public function __construct($id, $url_screenshot) {
        $this->id = $id;
        $this->url_screenshot = $url_screenshot;
    }


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set url_screenshot
     *
     * @param string $urlScreenshot
     */
    public function setUrlScreenshot($urlScreenshot)
    {
        $this->url_screenshot = $urlScreenshot;
    }

    /**
     * Get url_screenshot
     *
     * @return string 
     */
    public function getUrlScreenshot()
    { …
Run Code Online (Sandbox Code Playgroud)

php xml xml-serialization xml-deserialization symfony

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

C#在序列化/反序列化XML时更改列表中项目的元素名称

我有一个如下定义的类:

[XmlRoot("ClassName")]
public class ClassName_0
{
    //stuff...
}
Run Code Online (Sandbox Code Playgroud)

然后我创建一个ClassName_0列表,如下所示:

var myListInstance= new List<ClassName_0>();
Run Code Online (Sandbox Code Playgroud)

这是我用来序列化的代码:

var ser = new XmlSerializer(typeof(List<ClassName_0>));
ser.Serialize(aWriterStream, myListInstance);
Run Code Online (Sandbox Code Playgroud)

这是我用来反序列化的代码:

var ser = new XmlSerializer(typeof(List<ClassName_0>));
var wrapper = ser.Deserialize(new StringReader(xml));
Run Code Online (Sandbox Code Playgroud)

如果我将它序列化为xml,则生成的xml如下所示:

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfClassName_0 xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <ClassName_0>
        <stuff></stuff>
    </ClassName_0>
    <ClassName_0>
        <stuff></stuff>
    </ClassName_0>
</ArrayOfClassName_0>
Run Code Online (Sandbox Code Playgroud)

有没有办法序列化并能够从/向ClassName_0列表反序列化以下内容?

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfClassName xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <ClassName>
        <stuff></stuff>
    </ClassName>
    <ClassName>
        <stuff></stuff>
    </ClassName>
</ArrayOfClassName>
Run Code Online (Sandbox Code Playgroud)

谢谢!

c# xml xml-serialization xml-deserialization

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

实例验证错误:*不是*的有效值

我正在尝试反序列化一个XML字符串,其中元素的值不在我的Enum值的范围内.

Public enum MyEnum
{
    Unknown,
    Car,
    Bicycle,
    Boat
}

[SerializableAttribute()]
public class MyClass
{
    private string _id;
    private MyEnum _myEnum;

    public string ID
    {
        get { return _id; }
        set { _id = value; }
    }

    public MyEnum EnumValue
    {
        get { return _myEnum; }
        set { _myEnum = value; }
    }

    public MyClass(string id)
    {
        this._id = id;
    }

    public MyClass() : this("") { }
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试反序列化后面的字符串(注意Plane作为枚举值):

<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><MyClass><ID>1234567890123456789</ID><EnumValue>Plane</EnumValue></MyClass>
Run Code Online (Sandbox Code Playgroud)

然后我的反序列化将抛出异常,甚至在它为EnumValue命中我的公共字段之前,会出现以下异常消息:

实例验证错误:'Plane'不是EnumValue的有效值

是否可以返回EnumValue的默认值,如果我尝试在XML中解析的值不支持EnumValue?例如.对于此处提供的XML字符串,EnumValue应设置为"Unknown".

c# xml-deserialization

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

SQL 游标在调用 getString 时抛出内存不足

对我之前问题的附件参考:-内存不足

我会尽量准确。我从我的网络服务调用一个长 base64 字符串得到响应。我解码字符串并得到一个包含我的数据的巨大字符串。我反序列化字符串并使用如下字符串创建我的类的对象。

String decryptedXml = XmlObject.toDecryptedXmlString(gameDetail.getGameData(), app.getSessionEncryptionKey());
Game noviceGame = deserialiseGame(decryptedXml, NoviceGamer.class);
Run Code Online (Sandbox Code Playgroud)

desrialiseGame() 只是一种反序列化数据并创建并返回我的游戏实例的方法。为了将这个对象维护到多个会话(登录/注销),我将整个游戏数据(我的反序列化给了我游戏实例的字符串)存储在数据库中。

下次当用户登录时,为了创建游戏实例,我从我的数据库中获取字符串并再次尝试反序列化,以便我取回我的游戏实例。但是当我尝试从我的数据库中获取字符串时,我在获取字符串时遇到“内存不足”异常。

调用反序列化游戏的方法如下。

private HashMap<String, Game> games = new HashMap<String, Game>();

public void load(LocalDatabaseHelper localDbHelper) throws Exception
{
    synchronized(gameLockObject) {
        GameDetailDAO dao = new GameDetailDAO(localDbHelper);

        //this will fetch me the all the entities from databse
        ArrayList<GameDetailEntity> dbGameDetails = dao.getEntities(null, null);

        for (GameDetailEntity gameDetail : dbGameDetails) {
            String gameLevel = gameDetail.getDetailLevel();             

            String gameXml = gameDetail.getGameData();

            Game game = null;
            if(gameLevel.equalsIgnoreCase("Novice")) {
                game = Job.deserialiseJob(gameXml, NoviceLevel.class); …
Run Code Online (Sandbox Code Playgroud)

android out-of-memory xml-deserialization sqlcipher

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

C#将不同类型的xml数组反序列化为多个数组

我有以下xml:

<Applications>
    <AccessibleApplication></AccessibleApplication>
    <AccessibleApplication></AccessibleApplication>
    <EligibleApplication></EligibleApplication>
    <EligibleApplication></EligibleApplication>
</Applications>
Run Code Online (Sandbox Code Playgroud)

有没有办法将其反序列化为 C# 对象,以便 AccessibleApplications 和 EligibleApplications 是两个单独的数组?我尝试了以下但得到一个例外,因为“应用程序”被使用了不止一次。

[XmlArray("Applications")]
[XmlArrayItem("AccessibleApplication")]
public List<Application> AccessibleApplications { get; set; }

[XmlArray("Applications")]
[XmlArrayItem("EligibleApplication")]
public List<Application> EligibleApplications { get; set; }
Run Code Online (Sandbox Code Playgroud)

例外情况是:来自命名空间 '' 的 XML 元素 'Applications' 已经存在于当前作用域中。使用 XML 属性为元素指定另一个 XML 名称或命名空间。

这是可能的吗?

谢谢!

编辑:我忘了提到我不想仅仅为了为两个数组提供容器对象而拥有一个“应用程序”类。我有几种这样的情况,我不希望这些类的混乱,它们的唯一目的是拆分两个相同类型的数组。

我希望能够使用诸如 [XmlArrayItem="Application/AccessibleApplication"] 之类的某种标记将两个数组反序列化为外部对象,而无需创建“应用程序”类。

c# xml xml-serialization xml-deserialization xmlserializer

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

在 JMS 序列化程序中排除空属性

我使用的 XML API 可以选择仅检索响应的一部分。NULL如果使用此功能,这会导致生成的对象具有很多属性。有没有办法真正跳过NULL属性?我试图实施排除策略

shouldSkipProperty(PropertyMetadata $property, Context $context)`
Run Code Online (Sandbox Code Playgroud)

但我意识到无法访问当前的属性值。

一个例子是以下类

class Hotel {
    /**
     * @Type("string")
     */
    public $id;

    /**
     * @Type("integer")
     */
    public $bookable;

    /**
     * @Type("string")
     */
    public $name;

    /**
     * @Type("integer")
     */
    public $type;

    /**
     * @Type("double")
     */
    public $stars;

    /**
     * @Type("MssPhp\Schema\Response\Address")
     */
    public $address;

    /**
     * @Type("integer")
     */
    public $themes;

    /**
     * @Type("integer")
     */
    public $features;

    /**
     * @Type("MssPhp\Schema\Response\Location")
     */
    public $location;

    /**
     * @Type("MssPhp\Schema\Response\Pos")
     */
    public $pos;

    /**
     * @Type("integer") …
Run Code Online (Sandbox Code Playgroud)

php null serialization jms xml-deserialization

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