You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Xamarin中使用ZXing生成包含多个值的二维码

解决ZXing生成多值二维码的问题

嘿,这个问题其实很好搞定!二维码本身就是用来存储一段文本内容的,所以要放多个值的话,核心思路就是把多个值拼接成一个单一字符串,赋值给qr.BarcodeValue就可以了。之后扫描二维码时,再按照同样的规则把字符串拆回多个值就行。下面给你两种常用的实现方式:

方式一:使用自定义分隔符拼接

选一个不会出现在你的value1/value2/value3里的特殊字符(比如|、###、;这类)作为分隔符,把多个值拼起来:

public partial class MyQR : ContentPage {
    ZXingBarcodeImageView qr;
    public MyQR(string value1, string value2, string value3) {
        InitializeComponent();
        qr = new ZXingBarcodeImageView {
            HorizontalOptions = LayoutOptions.FillAndExpand,
            VerticalOptions = LayoutOptions.FillAndExpand
        };
        qr.BarcodeFormat = ZXing.BarcodeFormat.QR_CODE;
        qr.BarcodeOptions.Width = 400;
        qr.BarcodeOptions.Height = 400;
        // 用|作为分隔符拼接三个值,注意如果值里可能包含|,就换个更特殊的分隔符
        qr.BarcodeValue = $"{value1}|{value2}|{value3}";
        XAMLQR.Children.Add(qr);
    }
}

扫描后解析的示例(以C#为例):

// 假设扫描得到的文本是scannedText
var splitValues = scannedText.Split('|');
if (splitValues.Length == 3)
{
    string scannedValue1 = splitValues[0];
    string scannedValue2 = splitValues[1];
    string scannedValue3 = splitValues[2];
    // 后续处理逻辑
}

方式二:使用JSON序列化(推荐)

如果你的值里可能包含任意字符(比如和分隔符冲突),或者希望数据结构更清晰,建议用JSON序列化把多个值打包成字符串:

首先确保你的项目引用了System.Text.Json(或者Newtonsoft.Json,看你习惯),然后修改代码:

public partial class MyQR : ContentPage {
    ZXingBarcodeImageView qr;
    public MyQR(string value1, string value2, string value3) {
        InitializeComponent();
        qr = new ZXingBarcodeImageView {
            HorizontalOptions = LayoutOptions.FillAndExpand,
            VerticalOptions = LayoutOptions.FillAndExpand
        };
        qr.BarcodeFormat = ZXing.BarcodeFormat.QR_CODE;
        qr.BarcodeOptions.Width = 400;
        qr.BarcodeOptions.Height = 400;
        
        // 创建一个包含所有值的对象,序列化为JSON字符串
        var qrContent = new {
            Value1 = value1,
            Value2 = value2,
            Value3 = value3
        };
        qr.BarcodeValue = System.Text.Json.JsonSerializer.Serialize(qrContent);
        
        XAMLQR.Children.Add(qr);
    }
}

扫描后解析的话,需要定义对应的实体类来反序列化:

// 先定义和序列化时匹配的类
public class QrData
{
    public string Value1 { get; set; }
    public string Value2 { get; set; }
    public string Value3 { get; set; }
}

// 解析扫描到的文本
var scannedData = System.Text.Json.JsonSerializer.Deserialize<QrData>(scannedText);
// 现在可以直接用scannedData.Value1、scannedData.Value2等

这种方式的好处是数据结构清晰,不会因为值里的特殊字符导致解析出错,扩展性也更强——以后要加更多值,只需要修改实体类就行。

内容的提问来源于stack exchange,提问作者Juan Carlos Apx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 18:42:26